在Cakephp 2.0中测试Ajax请求

时间:2011-11-18 12:16:54

标签: ajax unit-testing testing cakephp-2.0

我的控制器中有一个动作,只有当请求是XmlHttpRequest时才会执行某些操作,如下所示:

function myAction() {
    if( $this->request->is('ajax') ) {
        doSomething();
    }
}

这个动作的TestCase会是什么样子?有没有办法模拟CakeRequest实例显示为Ajax请求?

2 个答案:

答案 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呼叫测试的最终解决方案,但可能是一种解决方法