问题
I'm writing a Grails 2.2.1 integration test using the Spock plugin, in which I am trying to post two sets of data to the same controller endpoint:
when: "The user adds this product to the inventory"
def postData = [productId: 123]
controller.request.JSON = postData
controller.addToInventory()
and: "Then they add another"
def secondPostData = [productId: 456]
controller.request.JSON = secondPostData
controller.addToInventory()
then: "The size of the inventory should be 2"
new JSONObject( controller.response.contentAsString ).inventorySize == 2
The problem I am seeing is that the same JSON is submitted to addToInventory() for both requests.
This StackOverflow question suggests calling controller.request.reset(), but this did not work (No signature of method: org.codehaus.groovy.grails.plugins.testing.GrailsMockHttpServletRequest.reset()).
Is what I am attempting possible?
回答1:
"Where:" can be used to perform data driven testing in spock testing framework. Try, using the following example:
when: "The user adds this product to the inventory"
controller.params.JSON = [productId:productId]
controller.addToInventory()
then: "The size of the inventory should be 2"
new JSONObject( controller.response.contentAsString ).inventorySize == 2
where:
ID|productId
1|123
2|456
Hope that helps!!!
回答2:
There is actually another way. Insert:
GrailsWebUtil.bindMockWebRequest()
at the start of your second test. This will effectively create a new ServletContext, a new MockHttpServletRequest, a new MockHttpServletResponse, and then bind all three into the current thread.
回答3:
While Anuj us correct that where
clauses should be used to keep tests clean, there are times when a test needs to run more than one request. In my case I wanted to test that when it recieved 2 repeat POSTS, the 2nd one was rejected correctly.
I found that resetting the response did what I needed:
controller.response.reset()
To clear out the response.
来源:https://stackoverflow.com/questions/18762871/how-to-make-multiple-requests-with-different-data-in-grails-integration-tests