use*_*178 5 acceptance-testing laravel laravel-4 codeception
我无法通过代码复制来复制ajax调用.
例如:
$I->sendAjaxPostRequest('login/verify', array('name' => 'name', 'password' => 'password'));
$I->seeResponseIsJson();
Run Code Online (Sandbox Code Playgroud)
不会引起任何错误.但另一方面,如果我做以下事情:
$I->sendAjaxPostRequest('login/verify', array('name' => 'name', 'password' => 'password'));
$I->seeResponseIsJson();
$I->seeResponseContainsJson(['login_failed' => 1]);
//or
$I->grabDataFromJsonResponse('data.login_failed');
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误:
ErrorException:传递给Codeception的参数2\Module\REST :: arrayHasArray()必须是数组类型,给定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());
Run Code Online (Sandbox Code Playgroud)
我收到这个var_dump():
object(Codeception\Maybe)#753 (3) {
["position":protected]=>
int(0)
["val":protected]=>
NULL
["assocArray":protected]=>
NULL
}
Run Code Online (Sandbox Code Playgroud)
使用Codeception,其他所有工作都按预期工作,我正在使用PhpBrowser.
我不确定这个答案对其他人有多大用处,但我在谷歌搜索类似的错误消息时到达这里:
ErrorException: Argument 2 passed to Codeception\Module\REST::arrayHasArray()
must be of the type array, null given
Run Code Online (Sandbox Code Playgroud)
经过一番绞尽脑汁后,我发现控制器(var_dump)的一些调试输出导致返回的文档不是有效的 JSON,因此使用$I->seeResponseContainsJson()会在内部引发错误,因为响应不是有效的 JSON
因此,请确保控制器发送的响应是有效的 JSON,这样错误就会消失