2013-07-14 59 views
5

我無法通過代碼複製ajax調用。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: 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

上面我從錯誤理解的是,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

我敢肯定,這個答案並不怎麼有用的是別人,但我在這裏登陸,而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 ,並且此錯誤應該消失