LaravelのPHPUnitで419エラーが発生した場合の対処法

LaravelでHTTPステータスコード419のエラーは、CSRFのエラーです。
CSRFトークンが一致しないときに発生します。

ミドルウェアのVerifyCsrfTokenを無効にすることで、このCSRFエラーを回避できます。

「use WithoutMiddleware」トレイトを使うとテストクラスのミドルウェアを無効にできますが、
VerifyCsrfToken以外のミドルウェアも無効になってしまいます。

class ExampleTest extends TestCase
{
    use WithoutMiddleware;
}

テスト実行時に対象の処理のみVerifyCsrfTokenを無効にするほうが望ましいと思いますので、
以下のように対象のテストに「withoutMiddleware(VerifyCsrfToken::class)」を追加します。

use App\Http\Middleware\VerifyCsrfToken;

class ExampleTest extends TestCase
{
    public function testStore() {
        $this
            ->withoutMiddleware(VerifyCsrfToken::class)
            ->post(route('store'), ['no' => 1])
            ->assertViewIs('index');
    }
}

これで、このテストではVerifyCsrfTokenは無効になり、CSRFエラーは発生しなくなります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください