В моем приложении laravel 5.7.3 я делаю автоматические тесты, как написано здесь https://laravel.com/docs/5.7/http-tests
Я создаю нового пользователя и открываю профиль под этим новым пользователем и пытаюсь изменить некоторые поля, которые можно редактировать на этой странице.,Я получил ошибку при внесении изменений:
"
Illuminate\Session\TokenMismatchException {#621
#message: ""
#code: 0
#file: "./vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php"
#line: 82
trace: {
./vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:82 { …}
./vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:223 { …}
...
./tests/Feature/ProfilepageTest.php:87 {
› $response = $this->actingAs($newUser)->get('/profile/edit-details');
› $response = $this->put( 'profile/edit-details-put', [ 'first_name' => 'Modified : '.$newUser->first_name, 'last_name' => 'Modified : '.$newUser->last_name, 'phone'=>'Modified : '.$newUser->phone, 'website'=>'Modified : '.$newUser->website, 'csrf_token'=> $csrf_token ]);
›
arguments: {
$uri: "profile/edit-details-put"
$data: array:5 [ …5]
}
}
./vendor/phpunit/phpunit/src/Framework/TestCase.php:1150 { …}
Эта ошибка вызвана моим кодом:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use DB;
use Illuminate\Foundation\Testing\WithFaker;
class ProfilePageTest extends TestCase // vendor/bin/phpunit tests/Feature/ProfilepageTest.php
{
public function testProfilePage()
{
$csrf_token = csrf_token();
...
$newUser = new User();
$newUser->username = 'Testing user on '.now();
$newUser->email = 'Testing_user_on_'.now().'@site.com';
...
$newUser->save();
$testing_user_id = $newUser->id;
...
$response = $this->actingAs($newUser)->get('/profile/edit-details');
$response = $this->put( 'profile/edit-details-put', [ 'first_name' => 'Modified : '.$newUser->first_name, 'last_name' => 'Modified : '.$newUser->last_name, 'phone'=>'Modified : '.$newUser->phone, 'website'=>'Modified : '.$newUser->website, 'csrf_token'=> $csrf_token ]);
...
}
}
В моем маршруте / web.php:
Route::group(array('prefix' => 'profile', 'middleware' => ['auth', 'isVerified']), function(){
Route::put('edit-details-put', array(
'as' => 'profile-edit-details-put',
'uses' => 'ProfileController@update_details'
));
Iиспользуйте Auth bad jrean / laravel-user-validating для проверки этого URL.и в документах по http-тестам я нашел следующее:
The CSRF middleware is automatically disabled when running tests.
Но все равно я получил ошибку csrf.
Почему и как это исправить?
Спасибо!