2015-06-06 3 views
2

Я получаю эту ошибку в своем файле журнала, когда запускаю тестовый пример для кода. Как это исправить?Ошибка TokenMismatch при запуске теста на кодирование

Код:

public function testUpdatePhone(FunctionalTester $I) 
{ 
     $I->wantTo('Test update phone'); 
     $I->sendPUT('/admin/phone/100', [ 
      'label' => 'My new label' 
     ]); 
     $I->see('Phone Number updated successfully.'); 
} 

Команда:

./vendor/bin/codecept run tests/functional/AdminPhoneTestCest.php:testUpdatePhone

Ошибка в файле журнала:

[2015-06-06 05:34:02] local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in /var/www/xxxx/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:46

Заранее спасибо :)

+0

Проблема заключается в том, что данные, которые передаются на этот тестовый маршрут, не включают действительный Laravel csfr_token(), хранящийся в поле формы '_token', которое ожидает промежуточное программное обеспечение в вашей ошибке. Это поле должно быть сгенерировано для каждого запроса, иначе оно не завершит проверку подлинности. Вы захотите найти работу. – Azeame

ответ

1

Эта проблема была решена путем добавления метода промежуточного слоя следующим

public function handle($request, Closure $next) 
{ 
if ($request->header('user-agent') == 'Symfony2 BrowserKit') { 
    return $next($request); 
} 

throw new TokenMismatchException; 
} 

Ссылка: https://laracasts.com/discuss/channels/general-discussion/latest-v5-laravelframework-csrfmiddleware-changes-broke-codeception-functional-tests

+0

Это действительно опасный метод. Любой браузер с этим агентом может обойти csrf. – LHolleman

0

Если вы используете phantomjs, то вам нужно, чтобы иметь clear_cookies: true в настройках, как нормальный restart: true, похоже, не поддерживается для phantomjs, поэтому он использует тот же токен, который недействителен в последующих тестах.

Смежные вопросы