I have a fresh installation of laravel 5.4
I've tried to modify the default test just to see a failing test.
tests/ExampleTest.php
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/ooops');
$response->assertStatus(200);
}
}
I was expecting to see more detailed error like no route has been found or defined
etc, but instead just this error saying
Time: 1.13 seconds, Memory: 8.00MB
There was 1 failure:
1) Tests\Feature\ExampleTest::testBasicTest
Expected status code 200 but received 404.
Failed asserting that false is true.
/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:51
/var/www/tests/Feature/ExampleTest.php:21
Its really hard to do TDD without meaningful error (yeah I know 404 in this case is enough, but most of the time its not the case).
Is there a way to enable the stacktrace the same as the one displayed on the browser? Or at least closer to that one so that I know what's the next step I should do.
Thanks in advance.
For Laravel 5.4 you can use disableExceptionHandling
method presented by Adam Wathan in this gist (source code below)
Now if you run in your test:
$this->disableExceptionHandling();
you should get full info that will help you to find the problem.
For Laravel 5.5 and up you can use withoutExceptionHandling
method that is built-in into Laravel
Source code of Adam Wathan's gist
<?php
namespace Tests;
use App\Exceptions\Handler;
use Illuminate\Contracts\Debug\ExceptionHandler;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase
{
use CreatesApplication;
protected function setUp()
{
/**
* This disables the exception handling to display the stacktrace on the console
* the same way as it shown on the browser
*/
parent::setUp();
$this->disableExceptionHandling();
}
protected function disableExceptionHandling()
{
$this->app->instance(ExceptionHandler::class, new class extends Handler {
public function __construct() {}
public function report(\Exception $e)
{
// no-op
}
public function render($request, \Exception $e) {
throw $e;
}
});
}
}