17 votes

Pourquoi est-ce que je reçois "CSRF token mismatch" lors de l'exécution de tests dans Laravel ?

Je veux exécuter mes tests sans recevoir d'exceptions "CSRF token mismatch". Dans la documentation de Laravel, il est noté que :

L'intergiciel CSRF est automatiquement désactivé lors de l'exécution des tests.

la ligne de code où l'exception est levée ressemble à ceci :

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

et pour les tests, je travaille dans mon terminal zsh :

php artisan test --env=testing

C'est ma classe test :

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

Qu'est-ce que je fais de travers et comment puis-je y remédier ? J'utilise laravel 7.

59voto

Daniel Katz Points 320

J'ai rencontré ce problème à plusieurs reprises et à chaque fois je l'ai résolu en lançant le programme : php artisan config:clear

18voto

Diogo Gomes Points 1521

Probablement le APP_ENV n'est pas réglée sur testing .

Vous pouvez définir une variable ENV dans la ligne de commande en précédant la commande php.

Dans votre cas, définissez l'environnement sur testing et exécutez la commande artisan par :

APP_ENV=testing php artisan test

1voto

DigitalDrifter Points 10485

Votre tableau de données est erroné. Essayez la modification suivante :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X