Laravel 测试响应中内置的调试方法
最后更新于 作者: Paul Redmond
仔细查看 Laravel 的 HTTP 测试 文档,您会注意到 TestResponse
类中内置了一些有用的辅助方法来调试 HTTP 响应。此类最近对这些方法进行了一些内部更新,使用了 Laravel 11 的 Dumpable 特性,我认为现在是重新审视这些有用辅助方法的好时机
$response = $this->get('/'); $response->dump();$response->dumpHeaders();$response->dumpSession();
这些方法也有一个 dd()
对应方法,它会“终止并转储”响应值
$response->dd();$response->ddHeaders();$response->ddSession();
这些方法是自己在测试中执行此操作的快捷方式
dump($response->headers->all());// ordd($response->headers->all());
但是,当您修改现有的测试,在 TestResponse
实例上链接各种断言时,这些方法的优势就体现出来了
$this->postJson(route('post.store', $post)) ->assertSessionHasNoErrors() ->assertCreated() ->assertJson(['created' => true]);
假设 assertSessionHasNoErrors()
失败,我想进行调试。我注意到,当我遇到没有分配响应的链时,我会像这样将响应分配给一个局部变量
$response = $this->postJson(route('post.store', $post)); dd($response); $response ->assertSessionHasNoErrors() ->assertCreated() ->assertJson(['created' => true]);
我不会争论您是否应该链接断言,并且永远不分配局部变量——这更多是风格偏好——但您会遇到没有分配局部变量的情况。使用这些调试方法,我们可以在测试失败之前快速调试
$this->postJson(route('post.store', $post))+ ->dumpSession() ->assertSessionHasNoErrors() ->assertCreated() ->assertJson(['created' => true]);
当您想在各种断言之间调试响应,而又不将 TestResponse
实例分配给局部变量时,这些调试辅助程序非常有用。
了解更多
这些功能(以及更多功能)在 Laravel 文档的 HTTP 测试 部分有介绍,其中还包括其他有用的 TestResponse
功能,使断言 JSON 变得轻而易举。