2013-07-14 18 views
5

Nie mogę replikować wywołań ajax za pomocą kodekceptacji.Kodekceptacja, nie można symulować zachowania ajaxowego

Na przykład:

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

nie podniesie żadnych błędów. Ale z drugiej strony, jeśli I wykonaj następujące czynności:

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

To daje mi ten błąd:

ErrorException: Argument 2 passed to Codeception\Module\REST::arrayHasArray() must be of the type array, null given, called in C:\xampp\htdocs\blog\laravel\vendor\codeception\codeception\src\Codeception\Module\REST.php on line 485 and defined

Co rozumiem z błędu powyżej jest to, że seeResponseContainsJson lub grabDataFromJsonResponse wewnętrznie przejdzie do odpowiedzi jako drugi argument do arrayHasArray. Wygląda jednak na to, że odpowiedź zawsze jest pusta.

Także, jeśli I wykonaj następujące czynności:

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

Otrzymuję to dla var_dump():

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

Wszystko inne działa zgodnie z oczekiwaniami Codeception używam PhpBrowser.

Odpowiedz

1

nie jestem pewien jak to odpowiedź jest przydatna nikomu, ale wylądowałem tutaj podczas googlowania na podobny komunikat o błędzie:

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

Po długich włosów ciągnięcie, odkryłem, że niektóre z wyjście debugowania mój kontroler (var_dump) powodował, że zwracany dokument nie był poprawny JSON, a używanie $I->seeResponseContainsJson() powodowało błędy wewnętrzne, ponieważ odpowiedź była nieważna JSON

Zapewnij odpowiedź, którą wysyła kontroler, JSON , a ten błąd powinien zniknąć