Thursday, December 6, 2012

Integration Test in Grails

To write code Integration Test we need 2 steps:
- Create new Object and Save them to database
- Create some functions test
  • Send request and receipt response.
  • Create new functions test require parameters
* Some special cases
And run by command line
grails test-app -integration -Dgrails.env=test ProfileServiceControllerTests

Step 1:
Create new object and save them to database. Please create object relation and save them before you save main object.

Example:
Students is main object relate with Subjects. Please create new Subjects and save it before you save Students object.

Step 2: Create some function tests
Send request by controller


def controller = new FeedServiceController()
controller.response.reset()      
        
controller.request.requestMethod = HttpMethod.GET
controller.params.sessionToken =  sessionToken
        
controller.feedBySessionToken()
JSONElement responseJSON = controller.response.json
        
println responseJSON.toString(4)

1. New controller and reset all response.
2. Set params for request.
3. Call function of controller
4. Get response and check from response.

* Some special cases:
1. Post file for controller to test upload file


 File testFile = new File("web-app/images/favicon.ico")
 MultipartFile file = new MockMultipartFile("avatar", 'avarta.ico', 'image/ico', testFile.readBytes())

 def controller = new ProfileServiceController()
 controller.response.reset()

 //Tets for vartar empty
 controller.request.setMethod("POST");
 controller.params.sessionToken = sessionToken
      
 controller.updateAvatar()
 JSONElement json = controller.response.json

New file by File and MultipartFile (note: 'avarta' word is field name that controller getFile. controller.getFile('avarta'))

New controller and send request with params is token

2. Test with function have token
- Send request to get token
- Send other request to get response to test
(You must reset response and request params by 2 function.  controller.response.reset() and controller.params.clear())





No comments:

Post a Comment