Почему я получаю «Несоответствие токена CSRF» при выполнении тестов в laravel? - PullRequest
1 голос
/ 09 апреля 2020

Я хочу запустить свои тесты без получения исключений "несоответствие токена CSRF". В документации laravel отмечается, что:

Промежуточное программное обеспечение CSRF автоматически отключается при выполнении тестов.

строка кода, в которую выдается исключение, выглядит следующим образом :

$response = $this->json('POST', route('order.create'), [
     'product_id', $product->id
]);

и для выполнения тестов я работаю в моем zsh терминале:

php artisan test --env=testing

Это мой тестовый класс:

<?php

   namespace Tests\Feature;

   use Illuminate\Foundation\Testing\RefreshDatabase;
   use Illuminate\Foundation\Testing\WithFaker;
   use Illuminate\Foundation\Testing\WithoutMiddleware;
   use Tests\TestCase;

  class SessionCartTest extends TestCase
  {
      public function testExample()
      {
          $product = \App\Product::inRandomOrder()->first();
          $response = $this->postJson(route('order.insert'), [
              'product_id' => $product->id,
          ]);
          $response->assertStatus(200); // here I receive 419
      }
  }

Что такое Я делаю неправильно, и как я мог это исправить? Я использую laravel 7.

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Ваш массив данных неверен. Попробуйте следующее изменение:

$response = $this->postJson(route('order.insert'), [
      'product_id' => $product->id, // use the arrow notation here.
 ]);
1 голос
/ 09 апреля 2020

Возможно, APP_ENV не установлен на testing.

Вы можете установить переменную ENV в командной строке, выполнив команду php.

Так что на вашем case задает среду для тестирования и запускает команду artisan:

APP_ENV=testing php artisan test
...