在Laravel 11.4测试中断言异常
Laravel  /  管理员 发布于 5个月前   154
Laravel 最近发布的Laravel 11.4引入了Exceptionsfacade,为在 Laravel 异常处理程序中断言异常
提供了便利。在这个版本发布之前,
我通常会使用$this->withoutExceptionHandling()来断言 HTTP 测试中发生了特定的异常:
use App\Exceptions\WelcomeException;
$this->withoutExceptionHandling();
try {
$this->get('/');
} catch (WelcomeException $e) {
$this->assertEquals('Woops, there was an issue with your request!', $e->getMessage());
return;
}
$this->fail(sprintf('The expected "%s" exception was not thrown.', WelcomeException::class));
当您希望请求不抛出任何异常时,使用withoutExceptionHandling就可以省去调试错误的中间环节。
上面的代码编写起来比较繁琐,
因为它需要手动捕获异常、对异常做出断言并调用return以避免手动调用$this->fail()。
手动失败将捕获测试未按预期抛出异常的情况。
如果在上述情况下调用 $this->fail(),输出结果如下:
$ phpunit
There was 1 failure:
1) Tests\Feature\ExampleTest::test_the_application_returns_a_successful_response
The expected "App\Exceptions\WelcomeException" exception was not thrown.
/app/tests/Feature/ExampleTest.php:33
Laravel 的异常面
让我们看看新的异常面如何简化我们的测试;重写后的第一个示例如下:
use Illuminate\Support\Facades\Exceptions;
Exceptions::fake();
$this->get('/');
Exceptions::assertReported(function (WelcomeException $e): bool {
return $e->getMessage() === "Woops, there was an issue with your request!";
});
使用 Exceptions Facade 可以让我们不必手动捕获异常来断言问题。
换句话说,测试可以保留 Laravel 的异常处理程序,但仍然可以断言请求过程中发生的异常。
如果我们想确保测试不会抛出特定的异常,或者不会抛出任何异常,新的门类就是我们的后盾:
Exceptions::assertNotReported(WelcomeException::class);
Exceptions::assertNothingReported();
如果异常处理程序没有报告WelcomeException,测试输出就会给出一条格式化很好的信息:
$ phpunit
There was 1 failure:
1) Tests\Feature\ExampleTest::test_the_application_returns_a_successful_response
The expected [App\Exceptions\WelcomeException] exception was not reported.
虽然有时你可能不想伪造 Laravel 的异常处理程序,
但在测试边缘情况时,新的异常门面(Exceptions facade)能极大地帮助我们清理代码:
Exceptions::assertReported(WelcomeException::class);
Exceptions::assertReportedCount($count);
Exceptions::assertNotReported(WelcomeException::class);
Exceptions::assertNothingReported();
Exceptions::throwFirstReported();
要了解有关 Exceptions facade 的更多信息,请查看Laravel 文档。
https://laravel.com/docs/11.x/http-tests#exception-handling
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号