【发布时间】:2016-05-26 23:51:44
【问题描述】:
我正在开发一个包含控制器的 Laravel 包,我希望对其进行单元测试。问题是如果在这些控制器之一中抛出异常,Laravel 的异常处理程序会捕获它并输出 500 HTTP 响应。 PHPUnit 并不明智,测试根本无法满足 200 OK 断言。 PHPUnit 在本地和 Travis CI 等服务的输出中缺少堆栈跟踪极大地阻碍了工作流程。
我知道我可以从 \App\Exceptions\Handler 等某个地方重新抛出异常,但由于这是一个包,我无法修改这些应用程序文件(laravel/laravel 只是测试的依赖项,以便绳索在必要的组件中测试控制器)。
我原以为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;
}
谁能告诉我为什么上面的方法不起作用?
【问题讨论】:
标签: php unit-testing laravel exception-handling phpunit