exceptions: implemented error rendering return
This commit is contained in:
parent
864a086900
commit
92c26718fd
|
@ -54,8 +54,10 @@ class Handler
|
|||
|
||||
/**
|
||||
* @param Throwable $e
|
||||
* @param bool $return
|
||||
* @return string
|
||||
*/
|
||||
public function exceptionHandler($e)
|
||||
public function exceptionHandler($e, $return = false)
|
||||
{
|
||||
if (!$this->request instanceof Request) {
|
||||
$this->request = new Request();
|
||||
|
@ -63,8 +65,19 @@ class Handler
|
|||
|
||||
$handler = $this->handler[$this->environment];
|
||||
$handler->report($e);
|
||||
ob_start();
|
||||
$handler->render($this->request, $e);
|
||||
|
||||
if ($return) {
|
||||
$output = ob_get_contents();
|
||||
ob_end_clean();
|
||||
return $output;
|
||||
}
|
||||
|
||||
http_response_code(500);
|
||||
ob_end_flush();
|
||||
$this->die();
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -34,6 +34,8 @@ class Whoops extends Legacy implements HandlerInterface
|
|||
$whoops = $this->app->make(WhoopsRunner::class);
|
||||
$handler = $this->getPrettyPageHandler($e);
|
||||
$whoops->pushHandler($handler);
|
||||
$whoops->writeToOutput(false);
|
||||
$whoops->allowQuit(false);
|
||||
|
||||
if ($request->isXmlHttpRequest()) {
|
||||
$handler = $this->getJsonResponseHandler();
|
||||
|
|
|
@ -49,15 +49,19 @@ class HandlerTest extends TestCase
|
|||
public function testExceptionHandler()
|
||||
{
|
||||
$exception = new Exception();
|
||||
$errorMessage = 'Oh noes, an error!';
|
||||
|
||||
/** @var HandlerInterface|Mock $handlerMock */
|
||||
$handlerMock = $this->getMockForAbstractClass(HandlerInterface::class);
|
||||
$handlerMock->expects($this->once())
|
||||
$handlerMock->expects($this->atLeastOnce())
|
||||
->method('report')
|
||||
->with($exception);
|
||||
$handlerMock->expects($this->once())
|
||||
$handlerMock->expects($this->atLeastOnce())
|
||||
->method('render')
|
||||
->with($this->isInstanceOf(Request::class), $exception);
|
||||
->with($this->isInstanceOf(Request::class), $exception)
|
||||
->willReturnCallback(function () use ($errorMessage) {
|
||||
echo $errorMessage;
|
||||
});
|
||||
|
||||
/** @var Handler|Mock $handler */
|
||||
$handler = $this->getMockBuilder(Handler::class)
|
||||
|
@ -68,7 +72,11 @@ class HandlerTest extends TestCase
|
|||
|
||||
$handler->setHandler(Handler::ENV_PRODUCTION, $handlerMock);
|
||||
|
||||
$this->expectOutputString($errorMessage);
|
||||
$handler->exceptionHandler($exception);
|
||||
|
||||
$return = $handler->exceptionHandler($exception, true);
|
||||
$this->assertEquals($errorMessage, $return);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -72,6 +72,14 @@ class WhoopsTest extends TestCase
|
|||
[$prettyPageHandler],
|
||||
[$jsonResponseHandler]
|
||||
);
|
||||
$whoopsRunner
|
||||
->expects($this->once())
|
||||
->method('writeToOutput')
|
||||
->with(false);
|
||||
$whoopsRunner
|
||||
->expects($this->once())
|
||||
->method('allowQuit')
|
||||
->with(false);
|
||||
$whoopsRunner
|
||||
->expects($this->once())
|
||||
->method('handleException')
|
||||
|
|
Loading…
Reference in New Issue