5

我无法通过代码接收复制 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: 传递给 Codeception\Module\REST::arrayHasArray() 的参数 2 必须是数组类型,给定 null,在 C:\xampp\htdocs\blog\laravel\vendor\codeception\codeception\src\Codeception\Module 中调用\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。

4

1 回答 1

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,并且此错误应该会消失

于 2013-08-04T18:21:48.470 回答