Подтвердить что ты не робот

Тестирование фильтров в laravel 4

Я новичок в laravel. Я пытаюсь проверить, что проверка подлинности работает на моем сайте, и я хочу протестировать процесс аутентификации в тестовом примере. Я создаю базу данных sqlite в памяти, создаю нового пользователя и использую метод ->save() для красноречия, чтобы сохранить его в базе данных. Я установил фильтр проверки подлинности, который проверяет имя пользователя в базе данных и в зависимости от того, что он либо позволяет пользователю входить в систему, либо возвращает "недопустимые учетные данные"

//мой файл UserTest.php:

class UserTest extends TestCase {

public function testUsernameIsNotRequired()
{
    // Create a new User
    $user = new User;
    $user->username = "[email protected]";
    $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, у которого есть все страницы для моего сайта.

this - это то, что я сделал для создания моего контроллера uri на данный момент

Мне нужен тестовый пример, который создает пользователя, который хранит его в базе данных в памяти, а затем аутентифицирует эту информацию. Если кто-либо знает тестирование laravel для фильтров, пожалуйста, дайте мне знать. Я просмотрел документацию для тестирования фильтров, но, я думаю, это плохо документировано.

Благодарю вас

4b9b3361

Ответ 1

Фильтры отключены в тестах на Laravel 4.

Вы можете использовать Route::enableFilters() в своем тесте, чтобы включить фильтры.

Вы можете прочитать различные обсуждения о том, почему/почему не тестировать фильтры,

Ответ 2

Вы можете сохранить большинство из этого в unit test.

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(); 
}