Codeception,无法模拟ajax行为

时间:2013-07-14 19:56:45

标签: laravel laravel-4 acceptance-testing codeception

我无法通过代码复制来复制ajax调用。

例如:

$I->sendAjaxPostRequest('login/verify', array('name' => 'name', 'password' => 'password'));
$I->seeResponseIsJson();

不会引发任何错误。但另一方面,如果我做以下事情:

$I->sendAjaxPostRequest('login/verify', array('name' => 'name', 'password' => 'password'));
$I->seeResponseIsJson();
$I->seeResponseContainsJson(['login_failed' => 1]);
//or
$I->grabDataFromJsonResponse('data.login_failed');

它给了我这个错误:

  

ErrorException:参数2传递给   Codeception \ Module \ REST :: arrayHasArray()必须是类型数组,   null,给出,调用   C:\ XAMPP \ htdocs中\博客\ laravel \厂商\ codeception \ codeception \ SRC \ Codeception \模块\ REST.php   在485行并定义

我从上面的错误中理解的是,内部的seeResponseContainsJson或grabDataFromJsonResponse会将响应作为第二个参数传递给arrayHasArray。但看起来无论响应总是空的。

另外,如果我执行以下操作:

$I->sendAjaxPostRequest('login/verify', array('name' => 'name', 'password' => 'password'));
var_dump($I->grabResponse());

我收到了var_dump():

object(Codeception\Maybe)#753 (3) {
  ["position":protected]=>
  int(0)
  ["val":protected]=>
  NULL
  ["assocArray":protected]=>
  NULL
}

使用Codeception,其他所有工作都按预期工作,我正在使用PhpBrowser。

1 个答案:

答案 0 :(得分:1)

我肯定这个答案对其他人没有多大帮助,但是我在谷歌搜索时发现了类似的错误信息:

ErrorException: Argument 2 passed to Codeception\Module\REST::arrayHasArray() 
must be of the type array, null given

经过多次拔毛之后,我发现我的控制器(var_dump)的一些调试输出导致返回的文档不是有效的JSON,因此使用$I->seeResponseContainsJson()在内部抛出错误,因为响应不是有效的JSON

因此,确保您的控制器发送的响应是有效的JSON,并且此错误应该消失