我正在按照这个课程 testdrivenlaravel 进行操作,它提到了一种禁用Laravel异常处理的方法,以防止Laravel处理发生的异常并转而抛出它,这样我们就可以得到更详细的错误我们的测试输出。
所以我在我的testcase类中添加了这个方法,而在render方法中我抛出异常
protected function disableExceptionHandling() {
$this->app->instance(Handler::class, new class extends Handler {
public function __construct()
{
}
public function report(\Exception $e)
{
}
public function render($request, \Exception $e)
{
throw $e;
}
});
}
但每当我在测试中调用它时,为了获得更详细的错误,我仍然会得到与Laravel Handler渲染相同的错误。
当我直接更改Handler
类时:
public function render($request, Exception $exception)
{
throw $exception;
// return parent::render($request, $exception);
}
我收到了详细的错误,但我需要让disableExceptionHandling
帮助器工作。
答案 0 :(得分:1)
在2019年,您尝试用App\Exceptions\Handler
方法替换的异常处理程序your_project\App\Exceptions\Handler
(请参阅instance
)绑定在Laravel IoC容器中的Illuminate\Contracts\Debug\ExceptionHandler::class
键处(请参阅{{ 1}}完成的地方。
要替换实际的处理程序,您必须使用默认绑定到的同一your_project/bootstrap/app.php
键而不是您使用的Illuminate\Contracts\Debug\ExceptionHandler::class
重新绑定它。即:
...在your_project / tests / TestCase.php中
App\Exceptions\Handler
最后确保在您的代码中引用的所有 all 类在文件顶部均具有正确完全限定名称空间的提及。例如:
public function disableExceptionHandling()
{
$this->app->instance(\Illuminate\Contracts\Debug\ExceptionHandler::class, new class extends Handler
{
public function render($request, \Exception $e)
{
throw $e;
}
});
}
并确保您正在从测试中调用该方法。
注意:上述异常禁用方式对流明非常有用,因为流明中没有Laravel的实际use App\Exceptions\Handler;
方法(请参见this answer中的更多详细信息)。
答案 1 :(得分:0)
将其放在测试方法的顶部:
$this->withoutExceptionHandling();
您不需要为此创建方法,它包含在laravel的'InteractsWithExceptionHandling'特性中,该特性由抽象TestCase使用,您应该从测试中进行扩展。