我在我的控制器的動作,其做一些事情只有在請求是XmlHttpRequest的,就像這樣:測試Ajax請求在CakePHP 2.0
function myAction() {
if($this->request->is('ajax')) {
doSomething();
}
}
什麼會爲這個動作看起來像一個TestCase?有沒有辦法將CakeRequest實例模擬爲Ajax請求?
我在我的控制器的動作,其做一些事情只有在請求是XmlHttpRequest的,就像這樣:測試Ajax請求在CakePHP 2.0
function myAction() {
if($this->request->is('ajax')) {
doSomething();
}
}
什麼會爲這個動作看起來像一個TestCase?有沒有辦法將CakeRequest實例模擬爲Ajax請求?
我不知道這是否是一個很好的方式或沒有,但在測試方法將做的工作的頂部添加
$_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
。在這種情況下,我們將數據作爲Ajax發送,因此不需要再檢查。
我們採用一些技巧來解決cake2.0
蛋糕supoprts以.json extention AJAX單元測試中,我們創建AppModel功能來欺騙的AJAX調用。像
public function isAjax() {
return $this->request->isAjax() || $this->request->ext == 'json';
}
然後在控制器中,而不是調用$ this-> request-> isAjax(),$ this-> isAjax()被使用。
當測試與Ajax調用動作,我們只是後綴以.json添加到行動呼籲,例如,
$this->testAction('/users/register');
這可能不是Ajax調用測試的最終解決方案,但可能是一個解決辦法
顯然這是接受的方式來做到這一點。 '$ _SERVER'變量在每次測試之前都會重置,所以不應該流入其他測試或測試運行器本身([來源](http://cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/2819-more-靈活性換控制器測試嘲諷-cakerequest)) – contrebis