【发布时间】:2014-09-14 23:51:51
【问题描述】:
我已经收到了服务器的回复:
)]}', {"success":0,"errors":{"error":["用户名无效或 密码。"]}}
我无法工作请参阅ResponseContainsJson 我试过了:
public function invalidUserShouldBe200AndJsonTest(AcceptanceTester $I)
{
$I->wantTo('To see a 200 status code and a json response');
$I->sendAjaxPostRequest('/api/v1/signin',array('email'=>'user@users.com','password'=>'user'));
$I->seeResponseCodeIs('200');
$I->seeResponseIsJson();
$I->seeResponseContainsJson(array('errors' => array('error' => array('Invalid username or password.'))));
}
但我有
我看到响应包含 json {"errors":{"error":["Invalid username or 密码。"]}}
如果响应是一样的
{"success":0,"errors":{"error":["无效的用户名或密码。"]}}
嗯,如果我尝试应该有问题
$I->seeResponseIsJson();
dd($I->grabResponse());
seeResponseIsJson 给我一个绿色条,但 grabResponse 给我 "" :(
我的测试
use \AcceptanceTester;
class SessionControllerCest
{
public function _before(\AcceptanceTester $I)
{
$I->wantTo('Grab the XSRF-TOKEN cookie value');
$I->amOnPage('/');
$text = $I->grabTextFrom('body > div > script');
$chunks1 = explode("\n", trim($text));
$chunks2 = explode("=", trim($chunks1[1]));
$cookieValue = rtrim($chunks2[2], ';"');
$I->setCookie('XSRF-TOKEN',$cookieValue);
$I->setHeader('X-XSRF-TOKEN',$cookieValue);
}
public function _after()
{
}
// tests
public function invalidUserShouldBe200AndJsonTest(AcceptanceTester $I)
{
$I->wantTo('To see a 200 status code and a json response');
$I->sendAjaxPostRequest('/api/v1/signin',array('email'=>'user@user.com','password'=>'sentryuser'));
$I->seeCookie('XSRF-TOKEN');
$I->seeResponseCodeIs('200');
$I->seeResponseIsJson();// until here green bar
// dd($I->grabResponse()); // empty string
//$I->seeResponseContainsJson(array('success' => 0,'errors' => array('error' => array('Invalid username or password.'))));
$I->seeResponseContains(""); // red bar
}
}
由于跨站点请求伪造 (XSRF) 保护,我在 _before 中设置了这样的设置 就像
Route::filter('xhr', function()
{
if(!Request::ajax()){
return Response::make('Not Found', 404);
}
});
Route::filter('xsrf', function()
{
if((!isset($_COOKIE['XSRF-TOKEN']) || is_null(Request::header('X-XSRF-TOKEN'))) || ($_COOKIE['XSRF-TOKEN'] !== Request::header('X-XSRF-TOKEN'))){
return Response::make('Not Found', 404);
}
});
路线
Route::group(array('prefix' => 'api/v1', 'before' => 'xhr|xsrf'), function() {
/* Session */
Route::post('signin', array('as' => 'session.store', 'uses' => 'App\Controllers\SessionController@store'));
});
调试
如果我对 _before 块进行注释,就会出现问题 尝试发送一个 cUrl 请求,例如:
curl -H 'X-Requested-With: XMLHttpRequest' -d "email=user@user.com" \
-d "password=mysentryuser" \
http://lama.io/api/v1/signin
我明白了
{"success":0,"errors":{"error":["用户名或密码无效。"]}}
但是当我运行它时
// tests
public function invalidUserShouldBe200AndJsonTest(AcceptanceTester $I)
{
$I->wantTo('To see a 200 status code and a json response');
$I->sendAjaxPostRequest('/api/v1/signin',array('email'=>'user@user.com','password'=>'mysentryuser'));
// $I->seeCookie('XSRF-TOKEN');
$I->seeResponseCodeIs('200');
//$I->seeResponseIsJson();// until here green bar
//dd($I->grabResponse()); // empty string
$I->seeResponseContainsJson(array('success' => 0,'errors' => array('error' => array('Invalid username or password.'))));
//$I->seeResponseContains(""); // red bar
}
我明白了
我看到响应包含 json {"success":0,"errors":{"error":["Invalid 用户名或密码。"]}}
所以可能有问题,但是什么!
【问题讨论】:
标签: laravel-4 phpunit codeception