2012-01-24 188 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