2017-01-30 11 views
4

У меня есть свежая установка Laravel 5,4Laravel: Как включить ошибку StackTrace на PHPUnit

Я попытался изменить тест по умолчанию, чтобы посмотреть, неудовлетворительный тест.

тесты/ExampleTest.php

class ExampleTest extends TestCase 
{ 
    /** 
    * A basic test example. 
    * 
    * @return void 
    */ 
    public function testBasicTest() 
    { 
     $response = $this->get('/ooops'); 

     $response->assertStatus(200); 
    } 
} 

Я ожидал увидеть более подробную ошибку как no route has been found or defined и т.д., но вместо этого только эта ошибка говоря

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 

его действительно трудно сделать TDD без значительная ошибка (да, я знаю 404 в этом случае достаточно, но большую часть времени это не так).

Есть ли способ включить stacktrace так же, как тот, который отображается в браузере? Или, по крайней мере, ближе к этому, чтобы я знал, что должен сделать следующий шаг.

Заранее спасибо.

ответ

4

Вы можете использовать disableExceptionHandling метод, представленный Адамом Wathan в this gist

Теперь, если вы запустите в тесте:

$this->disableExceptionHandling(); 

вы должны получить полную информацию, которая поможет вам найти проблему.

EDIT

<?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; 
      } 
     }); 
    } 
} 
+0

спасибо большое, то StackTrace показывает в настоящее время. Кажется, что я должен назвать это по каждому методу. Я положил его на абстрактный метод TestCase :: setUp. Есть ли рекомендуемый способ применения его при каждом тестировании? –

+0

@JaimeSangcap На самом деле это не так, его следует использовать, на мой взгляд, как помощник при проверке ошибок, но вы не должны иметь его при запуске реальных тестов, потому что это может изменить результат, и ваш тест будет неправильным в зависимости от вашего приложения , поэтому просто используйте его только в качестве помощника, который поможет вам отлаживать ошибки в тесте, а не как часть теста –

+0

да, вы правы, и даже без 'disableExceptionHandling' он создает значимые ошибки, как go. Спасибо, что указали, что это может спасти мне часы вытягивания волос;) –

 Смежные вопросы

  • Нет связанных вопросов^_^