Как я могу проверить фильтр auth в Laravel 4.1?
Я хочу написать модульный тест, который должен проверить, может ли неавторизованный пользователь просматривать список пользователей (который он не должен быть в состоянии).
мои маршруты
Route::group(array('prefix' => 'admin'), function() {
Route::get('login', function() {
return View::make('auth.login');
});
Route::post('login', function() {
Auth::attempt( array('email' => Input::get('email'), 'password' => Input::get('password')) );
return Redirect::intended('admin');
});
Route::get('logout', 'AuthController@logout');
Route::group(array('before' => 'auth'), function() {
Route::get('/', function() {
return Redirect::to('admin/users');
});
Route::resource('users', 'UsersController');
});
});
мой тест
public function testUnauthenticatedUserIndexAccess() {
$response = $this->call('GET', 'admin/users');
$this->assertRedirectedTo('admin/login');
}
мой фильтр
Route::filter('auth', function() {
if (Auth::guest()) return Redirect::guest('admin/login');
});
результат
не удалось утверждать, что освещает объектHttpResponse (...) является экземпляром класса "IlluminateHttpRedirectResponse".
Если я войдите в $response из теста, он показывает полный список пользователей, например, если администратор вошел в систему во время тестирования.
Если я перейду к администратору / пользователям, использующим браузер без входа в систему, я перенаправлен на вход, как и должен, поэтому фильтр auth действительно работает.
вопросы
- есть ли что-то в Laravel, что входит в первый пользователь во время тестирования для вас по умолчанию? Или Auth:: guest () всегда false по умолчанию во время тестирование?
- если да, то как мне выйти из системы во время модульного тестирования? Я попробовал $this - >be (null), но получил сообщение об ошибке, что переданный объект должен реализовать UserInterface.
1 ответов
фильтры Laravel автоматически отключаются для модульных тестов; их необходимо включить для конкретного тестового случая.
Route::enableFilters();
или это, если вы не заинтересованы в использовании статических фасадов
$this->app['router']->enableFilters();
посмотрите в документации по модульному тестированию.
теперь ваш тест должен вернуть правильный тип объекта, позволяющий пройти тест.