gpt4 book ai didi

php - 如何在 PHPUnit 测试中覆盖 Laravel 的异常处理程序?

转载 作者:搜寻专家 更新时间:2023-10-31 21:04:09 24 4
gpt4 key购买 nike

我正在开发一个包含 Controller 的 Laravel 包,我希望对其进行单元测试。问题是如果在这些 Controller 之一中抛出异常,Laravel 的异常处理程序会捕获它并输出 500 HTTP 响应。 PHPUnit 并不聪明,测试根本无法满足 200 OK 断言。本地和 Travis CI 等服务上的 PHPUnit 输出中缺少堆栈跟踪极大地阻碍了工作流程。

我知道我可以从诸如 \App\Exceptions\Handler 之类的地方重新抛出异常,但由于这是一个包,我无法修改那些应用程序文件( laravel/laravel 只是测试的依赖项,以便为测试 Controller 提供必要的组件。

我原以为 TestCase 中的 set_exception_handler() 调用会起作用,但奇怪的是它没有任何影响:

public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';

$app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();

set_exception_handler(function ($e) {
throw $e;
});

return $app;
}

谁能告诉我为什么上面的方法不起作用?

最佳答案

单元测试应该测试单个单元,而不是整个应用程序。

您很有可能正在进行功能或集成测试。

当您测试 Controller 并期待 200 响应时,您需要知道的一切就是响应代码。 500 响应未通过测试,表示故障或配置错误。 CI 工具应该只显示通过/失败测试的数量。

测试不是调试,不应提供任何特殊的回溯。如果您觉得您没有足够的关于错误性质的信息,您应该检查您的错误处理和日志记录。否则,当生产中发生错误时,您将面临同样的信息缺乏问题。

关于php - 如何在 PHPUnit 测试中覆盖 Laravel 的异常处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35420058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com