Laravel 5 — Модульное тестирование — код состояния 500, ожидается 200

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

Языковой контроллер

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

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

Тест языкового контроллера

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\LanguageController@showAllView');

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

    // test 2
    public function testShowAllView()
    {
        $result = $this->action('GET', 'Entities\LanguageController@showAllView');

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

        $this->assertViewHas('languages');

        $this->assertResponseOk();
    }
}

Ответы в cmd:

введите здесь описание изображения


person Dulo    schedule 25.04.2016    source источник
comment
Пробовали ли вы просматривать файлы журналов ошибок Laravel?   -  person Jono20201    schedule 25.04.2016
comment
просмотр файла журнала будет очень полезен, но я думаю, вы неправильно издеваетесь над languageRepo   -  person Mohamed Bouallegue    schedule 25.04.2016
comment
Установка пустого массива для $dontReport (список типов исключений, о которых не следует сообщать) в app/exceptions/Handler.php может помочь в устранении ошибок в тестах, поскольку таким образом их можно просмотреть в журналах.   -  person apex39    schedule 25.01.2017


Ответы (1)


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

[2016-04-26 08:45:49] тестирование. ОШИБКА: исключение «ErrorException» с сообщением «Попытка получить свойство не-объекта» в C:\xampp\htdocs\STP\storage\framework\views\76c117f88e2ab8d2c5f85f5187e254573559a2c3. php:7 Трассировка стека:

и следующий журнал:

Следующее исключение «ErrorException» с сообщением «Попытка получить свойство не-объекта (представление: C:\xampp\htdocs\STP\resources\views\admin\languages\showAll.blade.php)» в C:\xampp\htdocs \STP\storage\framework\views\76c117f88e2ab8d2c5f85f5187e254573559a2c3.php:7

Трассировки стека:

и, на мой взгляд, я получаю доступ к свойствам $language с помощью:

$languages->char, $language->name

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

$language['char'], $language['name']

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

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

person Dulo    schedule 26.04.2016