2014-12-22 477 views
1

我有一個控制器動作,它處理ajax和非ajax請求。但是,如果它是一個Ajax請求,它會做一些額外的事情。如何在Grails單元測試中模擬ajax請求

如果(request.xhr){做的東西只爲Ajax請求}

但是,當我試圖爲這個單元測試。無論我做了什麼,我都無法創建/模擬ajax請求。即request.xhr一直失敗。

我沒試過

request.makeAjaxRequest()

但是,它不工作。任何想法 ??

+0

顯示你寫單元測試的代碼。 – kazanaki

+0

你發現如何做到這一點?我有同樣的問題。 –

回答

1

雖然這是一段很長的時間,因爲這個問題是問,但這裏是我的Grails的即將到來的新手的解決方案......

controller.metaClass.getRequest = { -> 
     [xhr: true] 
} 

或者乾脆也可能是

void 'test list'() { 
    when: 
    request.method = 'POST' 
    request.makeAjaxRequest() 
    controller.getPage() 

    then: 
    // … 
} 

此解決方案工作我的情況嘲諷阿賈克斯請求

0

只需添加以下標題請求:controller.request.addHeader('X-Requested-With', 'XMLHttpRequest')

+1

供參考...我們提供了一個方便的方法來做到這一點。 'request.makeAjaxRequest()',正如我在一個單獨的答案中提到的那樣。 –

2

在單元測試中,你可以做這樣的事情:

request.makeAjaxRequest() 
+1

請參閱https://github.com/grails/grails-core/blob/f164ed3743378fb9e00d75deca15935283fc7157/grails-test/src/main/groovy/org/grails/plugins/testing/GrailsMockHttpServletRequest.groovy#L179-L186 –

相關問題