Codeception, неспособный имитировать поведение ajax

Я не могу реплицировать вызовы 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 (), должен иметь тип array, заданный 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.


person user2094178    schedule 14.07.2013    source источник


Ответы (1)


Я не уверен, насколько полезен этот ответ для кого-либо еще, но я приземлился здесь, пока искал в Google аналогичное сообщение об ошибке:

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

После долгого выдергивания волос я обнаружил, что некоторые отладочные данные моего контроллера (var_dump) приводили к тому, что возвращенный документ был недействительным JSON, и поэтому использование $I->seeResponseContainsJson() вызывало внутренние ошибки, поскольку ответ был недействительным JSON

Итак, убедитесь, что ответ, который отправляет ваш контроллер, является действительным JSON, и эта ошибка должна исчезнуть.

person ebonhand    schedule 04.08.2013