Я новичок в laravel. Я пытаюсь проверить, что проверка подлинности работает на моем сайте, и я хочу протестировать процесс аутентификации в тестовом примере. Я создаю базу данных sqlite в памяти, создаю новый User и использую ->save()
метод eloquent для его сохранения в базе данных. Я установил фильтр проверки подлинности, который проверяет имя пользователя в базе данных и в зависимости от того, что он либо позволяет пользователю входить в систему, либо возвращает «недопустимые учетные данные»,
// мой файл UserTest.php:
class UserTest extends TestCase { public function testUsernameIsNotRequired() { // Create a new User $user = new User; $user->username = "phil@ipbrown.com"; $user->password = "123456"; //$user->password_confirmation = "password"; // User should save $this->assertTrue($user->save()); // Save the errors $password = $user->getAuthPassword(); // There should be 0 error $this->assertEquals("123456",$password); $this->seed(); $this->be($user); $this->assertTrue(Redirect::route('authFilter')); } }
просто чтобы вы знали, что бит памяти в памяти теряется после завершения теста, так как все соединения с ним потеряны, поэтому я хочу проверить, правильно ли вставлен пользователь, который я сохранил на своем db, а во-вторых, я хочу проверить, Я могу войти на свой сайт, используя информацию этого нового пользователя.
// файл filters.php:
Route::filter('auth', function() { if (Auth::guest()) return Redirect::guest('login'); }); Route::filter('auth.basic', function() { return Auth::basic('username'); }); Route::filter('guest', function() { if (Auth::check()) return Redirect::to('/'); }); Route::filter('csrf', function() { if (Session::token() != Input::get('_token')) { throw new Illuminate\Session\TokenMismatchException; } });
Я пытался привязать фильтр к маршруту, чтобы я мог перенаправить на маршрут во время моего теста и который вызывает фильтр auth.basic, чтобы я мог проверить свой фильтр, я знаю, что я много делаю неправильно, поэтому, пожалуйста, не стесняйтесь исправить любые ошибки, которые вы приходите на
my routes.php файл:>
Route::get('/', function() { return View::make('hello'); }); Route::get('/authtest', array('as'=>'/authtest','before' => 'auth.basic', function() { return View::make('hello'); })); Route::group(array('prefix' => 'api/v1', 'before' => 'auth.basic'), function() { Route::resource('url', 'UrlController'); }); Route::get('authFilter', array('as'=>'authFilter','before' => 'auth.basic', function() { return Auth::basic('username'); }));
У меня также есть контроллер uri, у которого есть все страницы для моего сайта
это то, что я последовал, чтобы создать мой контроллер uri на данный момент
Мне нужен тестовый пример, который создает пользователя, который хранит его в базе данных в памяти, а затем аутентифицирует эту информацию. Если кто-либо знает тестирование laravel для фильтров, пожалуйста, дайте мне знать. Я просмотрел документацию для тестирования фильтров, но, я думаю, это плохо документировано.
Спасибо
Фильтры отключены в тестах на Laravel 4.
Вы можете использовать Route::enableFilters()
в своем тесте, чтобы Route::enableFilters()
фильтры.
Вы можете прочитать о различных дискуссиях о том, почему / почему не тестировать фильтры;
Вы можете сохранить большую часть этого в модульном тесте.
public function testMyFilter() { // Set up route with filter. Route::get('testFilter', ['before' => 'myfilter', function() { return 'Hello World'; }]); // Enable filters. Route::enableFilters(); // Be a user. $this->be($this->user); // Make a request that will use the filter. $response = $this->client->request('GET', 'testFilter'); // Check the response. $this->assertResponseOk(); }