我的控制器中有一个动作,只有当请求是XmlHttpRequest时才会执行某些操作,如下所示:
function myAction() {
if( $this->request->is('ajax') ) {
doSomething();
}
}
这个动作的TestCase会是什么样子?有没有办法模拟CakeRequest实例显示为Ajax请求?
答案 0 :(得分:5)
我不知道这是不是一个好方法,而是添加
$_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
在测试方法的顶部将完成这项工作。在这种情况下,我们将数据作为Ajax发送,因此不再需要检查。
答案 1 :(得分:0)
我们使用技巧来解决cake2.0的ajax单元测试
作为cake supoprts .json extention,我们在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呼叫测试的最终解决方案,但可能是一种解决方法