12

私はlaravelが初めてです。Web サイトで認証が機能することをテストしようとしており、テスト ケースで認証プロセスをテストしたいと考えています。インメモリsqliteデータベースを作成し、新しいユーザーを作成し、->save()雄弁な方法を使用してデータベースに保存します。データベース内のユーザー名をチェックする認証フィルターをセットアップしました。それに応じて、ユーザーのログインを許可するか、「無効な資格情報」を返します。

// 私の 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'));
}
}

すべての接続が失われるため、テストが完了するとメモリ内データベースが失われることをお知らせするために、データベースに保存したユーザーが適切に挿入されていることを確認し、次に確認したいこの新しいユーザーの情報を使用して、自分の Web サイトにログインできます。

// 私の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 フィルターを呼び出します。遭遇した間違いを修正する

私の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');
}));

また、Web サイトのすべてのページを含む uri コントローラーもあります。

これは、当面の uri コントローラーを作成するために従ったものです

ユーザーを作成してメモリ内データベースに保存し、そのユーザー情報を使用して認証するテスト ケースが必要です。フィルターのlaravelテストを知っている人がいれば、フィルターのテストに関するドキュメントを調べたことを教えてください。

ありがとうございました

4

2 に答える 2

2

これのほとんどは単体テストで保持できます。

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(); 
}
于 2014-07-30T16:23:04.377 に答える