为什么我在 laravel 中收到 "CSRF token mismatch" 而 运行 测试?

Why I receive "CSRF token mismatch" while running tests in laravel?

我想 运行 我的测试没有收到 "CSRF token mismatch" 异常。在 laravel 文档中指出:

The CSRF middleware is automatically disabled when running tests.

抛出异常的代码行如下所示:

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

对于 运行ning 测试,我正在我的 zsh 终端中工作:

php artisan test --env=testing

这是我的测试class:

<?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.

可能 APP_ENV 没有设置为 testing

您可以在 php 命令之前在命令行中设置 ENV 变量。

因此,根据您的情况,将环境设置为测试,并通过以下方式 运行 artisan 命令:

APP_ENV=testing php artisan test

您的数据数组有误。尝试以下更改:

$response = $this->postJson(route('order.insert'), [
      'product_id' => $product->id, // use the arrow notation here.
 ]);

我 运行 遇到这个问题 x 次,每次我都通过 运行 解决它: php artisan config:clear