2011-12-15 6 views
2

Symfony2認証メカニズムで保護されているコントローラの機能テストを書いてみたいと思います。私はそれを記述するのチュートリアルをたくさん読ん残念ながら、それらのすべては、現在のSymfony2のの(2.0.7に2.0.4をテストした)バージョンSymfony2ユニットテストでの認証の処理

私がこれまで行ってきた何で私のために動作しません:

追加しますconfig_test.ymlのセキュリティ設定

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 

    providers: 
     main: 
      users: 
       admin: { password: adminsmurf, roles: [ 'ROLE_USER' ] } 
       inventory: { password: inventorysmurf, roles: [ 'ROLE_ADMIN', 'ROLE_USER', 'ROLE_INVENTORY' ] } 
       andon: { password: andonsmurf, roles: [ 'ROLE_ADMIN', 'ROLE_ANDON' ] } 

    firewalls: 
     main: 
      pattern: /.* 
      http_basic: 
       realm: "Secured Area" 
       provider: main 
      logout:  true 
      security: true 
      stateless: true 
      anonymous: true 

単体テスト

class DefaultControllerTest extends WebTestCase 
{ 

    public function testCorrectAuthentificationCredentials() 
    { 
     $client = static::createClient(); 

     $crawler = $client->request('GET', '/inventory/index', array(), array(), 
            array(
              'PHP_AUTH_USER' => 'admin', 
              'PHP_AUTH_PW' => 'adminsmurf' 
             )); 

     $response = $client->getResponse(); 

     $this->assertEquals(200, $response->getStatusCode()); 
    } 
} 

このテストは失敗します(期待200、取得302)。誰かが私が間違っていることを助けることができますか?

更新16/12

私はさらに一歩です。私は通常のセキュリティファイルでフォームのログインを使用しています。 Symfonyはファイアウォールにhttp_basicログインを追加しました。これがリダイレクト(302)の理由でした。私はちょうど

form_login: false 

をテストセキュリティ設定に追加しました。今やリダイレクトはありませんが、結果として401状態コードを取得します。

+0

302はリダイレクトです。どこにリダイレクトされているか確認できますか? –

+0

@kubaこれはログインフォームへのリダイレクトです(フォームログインは私のアプリでの認証のための通常の方法です)。 – Timo

+0

私はリダイレクトの問題を解決しましたが、今はステータスコード401 – Timo

答えて

3

私は、HTTP基本認証が要求する第4引数として、第5引数ではないことを示しています。ソースがドキュメントです - 動作しない場合は、ドキュメントを更新する必要があります。しかし、私が知っている:

http://symfony.com/doc/2.0/cookbook/testing/http_authentication.html

あなたはこの正常に動作した後symfonyはフォームのエントリポイント(<使用する理由はありませんとしても、あなたは、背面のフォーム認証を有効にすることができます - 空想をあなたはリダイレクトされます。

希望に役立ちます!

1

私の場合、問題はテスト環境が別のデータベースを使用していたことでしたが、私はユーザーにそれを入力するのを忘れていました。 m)

私は知っている、これは実際にはあなたの問題の解決策ではありませんが、同じ問題を持つ誰もがアップした場合に、これがいくつのアップフォースが得られるか見てみましょう。誰もしなければ、まあ、私はその愚かな唯一の人です。

ちなみに、データベースの問題などで認証が失敗したかどうかをインメモリプロバイダで確認できます。それが私の問題が何であるかを知る方法です。

関連する問題