summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Exceptions/Handler.php15
-rw-r--r--src/Exceptions/Handlers/Whoops.php2
-rw-r--r--tests/Unit/Exceptions/HandlerTest.php14
-rw-r--r--tests/Unit/Exceptions/Handlers/WhoopsTest.php8
4 files changed, 35 insertions, 4 deletions
diff --git a/src/Exceptions/Handler.php b/src/Exceptions/Handler.php
index ee15717a..0503b5b7 100644
--- a/src/Exceptions/Handler.php
+++ b/src/Exceptions/Handler.php
@@ -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 '';
}
/**
diff --git a/src/Exceptions/Handlers/Whoops.php b/src/Exceptions/Handlers/Whoops.php
index 73352105..630aca1d 100644
--- a/src/Exceptions/Handlers/Whoops.php
+++ b/src/Exceptions/Handlers/Whoops.php
@@ -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();
diff --git a/tests/Unit/Exceptions/HandlerTest.php b/tests/Unit/Exceptions/HandlerTest.php
index 40202be8..7987f9d6 100644
--- a/tests/Unit/Exceptions/HandlerTest.php
+++ b/tests/Unit/Exceptions/HandlerTest.php
@@ -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);
}
/**
diff --git a/tests/Unit/Exceptions/Handlers/WhoopsTest.php b/tests/Unit/Exceptions/Handlers/WhoopsTest.php
index 261ee83f..4062979b 100644
--- a/tests/Unit/Exceptions/Handlers/WhoopsTest.php
+++ b/tests/Unit/Exceptions/Handlers/WhoopsTest.php
@@ -74,6 +74,14 @@ class WhoopsTest extends TestCase
);
$whoopsRunner
->expects($this->once())
+ ->method('writeToOutput')
+ ->with(false);
+ $whoopsRunner
+ ->expects($this->once())
+ ->method('allowQuit')
+ ->with(false);
+ $whoopsRunner
+ ->expects($this->once())
->method('handleException')
->with($exception);