我有一個控制器動作,它處理ajax和非ajax請求。但是,如果它是一個Ajax請求,它會做一些額外的事情。如何在Grails單元測試中模擬ajax請求
如果(request.xhr){做的東西只爲Ajax請求}
但是,當我試圖爲這個單元測試。無論我做了什麼,我都無法創建/模擬ajax請求。即request.xhr一直失敗。
我沒試過
request.makeAjaxRequest()
但是,它不工作。任何想法 ??
我有一個控制器動作,它處理ajax和非ajax請求。但是,如果它是一個Ajax請求,它會做一些額外的事情。如何在Grails單元測試中模擬ajax請求
如果(request.xhr){做的東西只爲Ajax請求}
但是,當我試圖爲這個單元測試。無論我做了什麼,我都無法創建/模擬ajax請求。即request.xhr一直失敗。
我沒試過
request.makeAjaxRequest()
但是,它不工作。任何想法 ??
雖然這是一段很長的時間,因爲這個問題是問,但這裏是我的Grails的即將到來的新手的解決方案......
controller.metaClass.getRequest = { ->
[xhr: true]
}
或者乾脆也可能是
void 'test list'() {
when:
request.method = 'POST'
request.makeAjaxRequest()
controller.getPage()
then:
// …
}
此解決方案工作我的情況嘲諷阿賈克斯請求
只需添加以下標題請求:controller.request.addHeader('X-Requested-With', 'XMLHttpRequest')
供參考...我們提供了一個方便的方法來做到這一點。 'request.makeAjaxRequest()',正如我在一個單獨的答案中提到的那樣。 –
在單元測試中,你可以做這樣的事情:
request.makeAjaxRequest()
請參閱https://github.com/grails/grails-core/blob/f164ed3743378fb9e00d75deca15935283fc7157/grails-test/src/main/groovy/org/grails/plugins/testing/GrailsMockHttpServletRequest.groovy#L179-L186 –
顯示你寫單元測試的代碼。 – kazanaki
你發現如何做到這一點?我有同樣的問題。 –