J'ai une nouvelle installation de laravel 5.4
J'ai essayé de modifier le test par défaut juste pour voir un test qui échoue.
tests/ExampleTest.php
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/ooops');
$response->assertStatus(200);
}
}
Je m'attendais à voir une erreur plus détaillée comme no route has been found or defined
etc, mais juste cette erreur disant
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
C'est vraiment difficile de faire TDD sans erreur significative (ouais je sais que 404 dans ce cas est suffisant, mais la plupart du temps ce n'est pas le cas).
Existe-t-il un moyen d'activer la trace de pile identique à celle affichée sur le navigateur? Ou du moins plus proche de celui-là pour que je sache quelle est la prochaine étape que je devrais faire.
Merci d'avance.
Pour Laravel 5.4 vous pouvez utiliser la méthode disableExceptionHandling
présentée par Adam Wathan dans ce Gist (code source ci-dessous)
Maintenant, si vous exécutez votre test:
$this->disableExceptionHandling();
vous devriez obtenir des informations complètes qui vous aideront à trouver le problème.
Pour Laravel 5.5 et plus, vous pouvez utiliser la méthode withoutExceptionHandling
intégrée à Laravel
Code source de 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;
}
});
}
}
S'il vous arrive d'utiliser Laravel 5.5 et plus, vous pouvez utiliser les méthodes intégrées:
$this->withoutExceptionHandling();
$this->withExceptionHandling();
Soit dans votre méthode setUp, soit dans votre méthode de test. Ils sont définis dans ce qui suit trait .
Pour un débogage rapide et sale, vous pouvez également utiliser la méthode dump
sur l'objet response
:
/** @test */
public function it_can_delete_an_attribute()
{
$response = $this->json('DELETE', "/api/attributes/3");
$response->dump()->assertStatus(200);
$this->assertDatabaseMissing('table', [
'id' => $id
]);
...
}
Il y a une leçon laracast qui couvre ces détails.