我希望在运行测试时不会收到“CSRF令牌不匹配”异常。
运行测试时,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。
5条答案
按热度按时间ioekq8ef1#
我现在遇到这个问题x次,每次我都通过运行以下命令来修复它:
php artisan config:clear
efzxgjgh2#
可能是
APP_ENV
未设置为testing
。您可以通过在php命令之前在命令行中设置ENV变量。
因此,在您的情况下,将环境设置为测试,并通过以下方式运行artisan命令:
ujv3wf0j3#
您的数据数组错误。请尝试下列变更:
pbossiut4#
当你在Docker上运行测试时,如果APP_ENV被硬编码为docker-composite.yaml文件中的testing(dev,local)以外的值,phpunit将无法正常执行测试。你需要删除Docker文件中的所有APP_ENV。
os8fio9y5#
这是通过设置自定义csrf-token来实现的