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状態コードを取得します。
302はリダイレクトです。どこにリダイレクトされているか確認できますか? –
@kubaこれはログインフォームへのリダイレクトです(フォームログインは私のアプリでの認証のための通常の方法です)。 – Timo
私はリダイレクトの問題を解決しましたが、今はステータスコード401 – Timo