2012-01-24 238 views
2

如何在Grails中为控制器设置ajax请求测试?Grails:集成测试Ajax请求 - xhr

我已经试过

def homeController = new HomeController() 

    homeController.request.contentType = "text/json" 
    homeController.request.content = '{"event_id":2}'.getBytes() 
    homeController.request.xhr = true //error: can't be set 

    homeController.landingPage() 

在我“的LandingPage”行动我有

Controller 
... 
... 
if(params.event_id){ 
    //set values of the "event" object 
} 

if (request.xhr) { 

     def result = [eventTile: event.getAt(0).title, eventId: event.getAt(0).id] 

      render result as JSON 
      return 
     } 
... 
... 

我不能找到一种方法,通常没有指定它到达PARAMS领域。

homeController.params.event_id = 2 

所以,我怎么能建立一个Grails集成测试设置XHR为真,这将来自我的控制器返回JSON?

+0

你试过例如'homeController.metaClass.getRequest = {[xhr:true]}' – Armand

回答

2

也许我没有得到正确的问题。但是发现你可以用这种方式强制你的请求被视为xhr请求。

def homeController = new HomeController() 

homeController.request.content = '{"event_id":2}'.getBytes() 
homeController.request.makeAjaxRequest() 
homeController.landingPage() 

的返回值将是一个GrailsMockHttpServletResponse

homeController.response.json == "" //Make your tets here