Отключите фильтры маршрута при тестировании в Laravel 4.2 - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь написать тесты для проверки точки API на унаследованном приложении, над которым я работал в течение некоторого времени. Мой маршрут защищен фильтром auth.

routes.php

$route->post('protected/route', ['before' => 'auth', 'uses' => 'ProtectedController@someProtectedTask']);

ProtectedControllerTest.php

public function testSomeProtectedTask {
    $routePayload = [...];
    $response = $this->call('POST', 'protected/route', [], [], [], $routePayload)
    $this->assertResponseOk();
}

Ответ, который я получаю: «Код ожидаемого состояния 200, получен 401» (не авторизован).

Я пытался добавить

$this->app->forgetMiddleware('auth');
Методы с

по setUp и testSomeProtectedTask без особого успеха. Предполагается, что фильтры отключаются при тестировании Laravel, но я не уверен в этом и не могу найти, как их точно отключить.

Изменить:

Позже я обнаружил, что моя среда была установлена ​​на 'production', а не 'testing' из-за неправильной конфигурации тестов, но вопрос все еще действителен, так как мне нужно также протестировать фильтр 'auth'. Тесты можно включить, добавив Route::enableFilters(). Подробнее об этой теме .


Вопрос:

Кто-нибудь знает, как отключить фильтр auth при тестировании, не комментируя его перед тестами? Или есть лучший способ проверить конечные точки API в Laravel 4.2 и каким-либо образом проверять подлинность?

1 Ответ

0 голосов
/ 18 мая 2018

Хотя @aynber опубликовал несколько хороших советов в комментариях, я все еще не смог проверить auth в одном тесте и включить его в другом.

Решением, которое я выбрал, было издевательство над пользователем для этого конкретного теста.

ProtectedControllerTest.php

public function testSomeProtectedTask {
    $routePayload = [...];

    $this->be(new \Implementation\Of\UserInterface); //simulate logged in user

    $response = $this->call('POST', 'protected/route', [], [], [], $routePayload)
    $this->assertResponseOk();
}
...