Laravel 8 测试 GET http 请求误报
Posted
技术标签:
【中文标题】Laravel 8 测试 GET http 请求误报【英文标题】:Laravel 8 test GET http request false positive 【发布时间】:2021-01-25 09:05:32 【问题描述】:我正在尝试编写带有一些断言的测试。 这是一个简单的 GET 请求示例,我希望它会失败,因为页面上缺少文本。但是,它给了我绿色。当我检查响应内容时,我清楚地看到它抛出错误。我正在使用 laravel 8。
<?php
namespace Tests\Feature;
use Carbon\Carbon;
use Tests\TestCase;
use App\Models\Concert;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ViewConcertListingTest extends TestCase
use DatabaseMigrations;
/** @test */
function user_can_view_a_concert_listing()
$concert = Concert::create([
'title' => 'The Red Chord',
'subtitle' => 'with Animosity and Lethargy',
'date' => Carbon::parse('December 13, 2016 8:00pm'),
'ticket_price' => 3250,
'venue' => 'The Mosh Pit',
'venue_address' => '123 Example Lane',
'city' => 'Laraville',
'state' => 'ON',
'zip' => '17916',
'additional_information' => 'For ticket, cal (555) 555-5555.',
]);
$view = $this->get('/concerts/'.$concert->id);
$view->assertSee('The Red Chord');
$view->assertSee('with Animosity and Lethargy');
$view->assertSee('December 13, 2016');
$view->assertSee('8:00pm');
$view->assertSee('32.50');
$view->assertSee('The Mosh Pit');
$view->assertSee('123 Example Lane');
$view->assertSee('Laraville, ON 17916');
$view->assertSee('For tickets, call (555) 555-5555.');
【问题讨论】:
“当我检查响应内容时,我清楚地看到它抛出错误”这是什么意思?你看到什么错误信息?一些建议:您应该研究创建测试模型的工厂,应该使用route()
帮助程序而不是 URL,并且可以通过链接方法来减少代码。例如。 $this->get('/concerts/' . $concert->id)->assertSee('x')->assertSee('y')->assertDontSee('z');
测试没有失败,但是成功了。这就是我所说的“当我检查响应内容时,我清楚地看到它抛出错误”。
【参考方案1】:
protected function setUp()
parent::setUp();
$this->withoutExceptionHandling();
laravel 在后台自动“处理”异常,并且从不将其抛出到我们的测试中。为了自己处理这个问题,我们需要使用 withoutExceptionHandling() 方法
【讨论】:
任何抛出异常的东西仍然无法通过测试。你的代码所做的只是让测试在异常处停止,因为它没有被捕获。 我必须为每个测试课程都这样做吗? 不,我个人在测试返回成功时在操作之前的函数中使用它,它应该返回 false,就像您使用 auth 中间件时一样以上是关于Laravel 8 测试 GET http 请求误报的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 8 Fortify 登录显示 429 太多请求
如何在 Laravel-8 和 InertiaJs 中向服务器发出 POST 请求时在浏览器中保留当前的 GET url