2012-02-02 10 views
3

私はSymfony2アプリケーションでいくつかの機能テストを行い、適切な役割を持つユーザだけがコントローラのアクションにアクセスできることを確認してコントローラのセキュリティをアサートしたいと思います。symfony2:テスト設定からユーザの資格を取得する

providers: 
    in_memory: 
     users: 
      basic: { password: basic, roles: ROLE_BASIC } 
      admin: { password: admin, roles: ROLE_ADMIN } 

私は私が書くすべてのテストにこれらのユーザー(私は多くを書くことにします)ハードコードにしたくない:私は基本的な資格情報を使用して認証異なる役割を持つ2人のユーザーを設定しました。理想的には、コンテナから自分の設定で定義したユーザーの詳細を取得したいと考えています。これは可能ですか? I.私はこれをしたい

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

:代わりにこれを行うの

// Get the user details from the container 
$users = $this->container->get('something'); 
$user = $users['admin']; 

$crawler = $client->request('GET', '/inventory/index', array(), array(), 
    array(
     'PHP_AUTH_USER' => $user->getUsername(), 
     'PHP_AUTH_PW' => $user->getPassword() 
    )); 

答えて

1

することは、特にベースWebTestCaseクラス、hereLiipFunctionalTestBundleを見てみましょう。

私はこのバンドルを個人的に使用していませんが、テストケース内からの認証を考慮していると主張しています。

更新

あなたは備品としてではなく、メモリ内のユーザーをロードしたほうが良いかもしれません。データベースを使用していない場合は、LiipFunctionalTestBundleにSQLiteを使用するように設定します。これにより、テスト内から各ユーザーにアクセスできるようになります。また

、おそらく推奨されていないが、あなたはいつでもこのような何か実行して liip_functional_test.authenticationを変更することができます:あなたは、テスト環境にいると、複雑なものに飛び込むしたくない場合は

$this->getContainer()->setParameter('liip_functional_test.authentication', 'new_value'); 
+0

ありがとうございます - 私はそのバンドルを試しました(私は実際にテストデータベースのキャッシュに使用しています)が、実際には私の問題を解決しません。これは、 'liip_functional_test.authentication'パラメータを使って設定ファイルのように認証するユーザを指定することができます。しかし、私はさまざまな役割を持つ多くの異なるユーザーからのリクエストを作成しようとしているので、問題は解決しません。理想的には、テストクラス内のすべてのユーザー資格情報にアクセスする必要があります。詳細を自分のバンドルのカスタム設定として複製します。 – Craig

+0

@Craig:私の答えに行った更新を見てください。 – leek

+0

私は各テストにオーバーヘッドを追加したくないので、私は望むよりも遅いので、フィクスチャを使わずにこれを達成することを望んでいました。それは実行可能な最後の手段ですが、私は@Florianによって提案されたYAMLのアプローチを試してみます。それがうまくいかない場合は、私は備品を探すでしょう。ありがとう! – Craig

2

を、 実際には最も簡単な方法は、Yamlパーサを使用してメモリ内のプロバイダを含むファイルを解析し、それを使用してクライアント要求を供給することです。

LiipFunctionalTestBundleを使用すると、定義する必要があります。は、1人のユーザーと接続するユーザーがに制限されています。 さらに、この情報をセキュリティプロバイダセクションに1回、DIパラメータに1回複製する必要があります。

最後のオプションは、プライベートセキュリティサービスを使用して自分自身を構成する独自のサービスを定義することです。これは単純なyaml解析よりはるかに複雑で、メンテナンスが簡単です:)。

+0

YAMLの構文解析は、もっと統合されたものを望んでいたとしても、最も簡単で簡単な選択肢になるように思えます。私はそれを行く、ありがとう! – Craig

+1

このアプローチは私が最初にやりたいことでしたが、より多くのテストを書きましたが、最終的には実際のユーザーを使用する必要があることに気がついたので、フィクスチャを使用しました。しかし、助けてくれてありがとう! – Craig

関連する問題