2016-04-25 6 views
2

Почему модульный тест в «тест 1» возвращает мне код состояния 500, а не 200? Может ли кто-нибудь объяснить мне? Вот пример из 2 тестов для одного и того же действия, и они возвращают другой код состояния. Я ожидал 200 в обоих тестах?Laravel 5 - Тестирование устройства - код состояния 500, ожидаемый 200

LanguageController

class LanguageController extends Controller implements IEntityViewManager 
    { 
      public function showAllView() 
      { 
       $allLanguages = $this->languageRepo->orderBy('id'); 

       return view('admin.languages.showAll')->with('languages', $allLanguages); 
      } 
    } 

LanguageControllerTest

class LanguageControllerTest extends TestCase 
{ 

    public function __construct($name = NULL, array $data = array(), $dataName = '') 
    { 
     parent::__construct($name, $data, $dataName); 
    } 

    public function setUp() 
    { 
     parent::setUp(); 
    } 

    public function tearDown() 
    { 
     Mockery::close(); 
    } 

    protected function setUpMock() 
    { 
     $mock = Mockery::mock(LanguageRepositoryInterface::class); 
     $this->app->instance(LanguageRepositoryInterface::class, $mock); 

     return $mock; 
    } 

    // test 1 
    public function testShowAllLanguages() 
    { 
     $mock = $this->setUpMock(); 

     $mock->shouldReceive('orderBy')->once()->andReturn([1]); 

     $result = $this->action('GET', 'Entities\[email protected]'); 

     var_dump("Test 1 : " . $result->getStatusCode()); // RETURNS 500 
    } 

    // test 2 
    public function testShowAllView() 
    { 
     $result = $this->action('GET', 'Entities\[email protected]'); 

     var_dump("Test 2 : " . $result->getStatusCode()); // RETURNS 200 

     $this->assertViewHas('languages'); 

     $this->assertResponseOk(); 
    } 
} 

Ответы в CMD:

enter image description here

+2

Вы пробовали посмотреть файлы журнала ошибок Laravel? – Jono20201

+0

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

+0

Установка пустого массива для '$ dontReport' (список исключений, которые не должны сообщаться) в' app/exceptions/Handler. php' может помочь в устранении ошибок в тестах, так как их можно просматривать в журналах таким образом. – apex39

ответ

1

Я проверил laravel.log и я обнаружил следующие журналы:

[2016-04-26 08:45:49] testing.ERROR: exception 'ErrorException' with message 'Trying to get property of non-object' in C:\xampp\htdocs\STP\storage\framework\views\76c117f88e2ab8d2c5f85f5187e254573559a2c3.php:7 Stack trace:

и следующий лог:

Next exception 'ErrorException' with message 'Trying to get property of non-object (View: C:\xampp\htdocs\STP\resources\views\admin\languages\showAll.blade.php)' in C:\xampp\htdocs\STP\storage\framework\views\76c117f88e2ab8d2c5f85f5187e254573559a2c3.php:7

Stack trace:

и на мой взгляд, я доступ к свойствам $ языка с:

$ языках -> char, $ language-> name

, но это массив, поэтому я должен обращаться к:

$ языка [ 'символ'], $ языка [ 'имя']

и оба теста теперь работают правильно и возвращает код 200статус.

Спасибо всем за помощь.

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