2012-01-27 11 views
4

機能テストでHTTP認証をシミュレートすることができません私はsymfony.comに説明し、次の技術を使用しようとしている:。機能的にログインするユーザーを要求するコントローラをテストするための試みでhttp://symfony.com/doc/current/cookbook/testing/http_authentication.htmlSymfony2の:

これまでのところ、私のログインフォームが動作しています。私はログインでき、Symfony2デバッグWebツールバーは私のユーザを認証済みとして表示しています。また、私はすでにログインプロセス自体のための機能テストを書いていますが、これは合格です。だから、今私は2つのシナリオで、私のログインが機能している。

他のコントローラのためにそのようなHTTP認証をシミュレートしようとしたときに私がいる唯一の問題は、次のとおりです。

$client = static::createClient(array(), array(
    'PHP_AUTH_USER' => 'tester', 
    'PHP_AUTH_PW' => 'testpass', 
)); 

私は私が私のログインページにリダイレクトされていますことを、$クライアントを検査することで見ることができます、私はこのような何かしようとした瞬間:

$crawler = $client->request('GET', '/'); 

は、私は、同様のブラウザを経由して、そのアカウントでログインすることができますよう、パスワードtestpassを持つユーザーテスターは、DBに存在することを知っています。

私はセキュリティコントローラのテストから次のコードを使用することができます。

$client = $this->createClient(array(), array('HTTP_HOST' => 'myapp.test')); 

    // Visit user login page and login 
    $crawler = $client->request('GET', '/login'); 
    $form = $crawler->selectButton('Login')->form(); 
    $crawler = $client->submit($form, array('_username' => 'tester', '_password' => 'testpass')); 

    // ... carry on with remainder of tests 

が、私は、これは、これを行うための最も効率的な方法であれば、あまりにもわかりません。

私は何が間違っているかについて少し驚いています。何か案は? Symfony2に変更が加えられたことは、このプロセスが変更され、HTTP認証シミュレーションが機能しないか、動作が異なることを意味しますか?私はHTTPを許可するようにいくつかのセキュリティ設定で私のconfig_test.ymlを変更しない限り、

public function setUp() 
{ 
    // Perform user login. 
    $this->client = $this->createClient(array(), array('HTTP_HOST' => 'scire.test')); 
    $crawler = $this->client->request('GET', '/login'); 
    $form = $crawler->selectButton('Login')->form(); 
    $this->client->submit($form, array('_username' => 'tester', '_password' => 'tester')); 
} 

HTTP認証が、ここでは動作しません:それについて考える

答えて

5

は、私は次のセットアップ方法を使用してログインを行う可能性があります認証。

自己注:HTTP認証はDoctrineユーザープロバイダとは異なります。

+0

全く同じことに問題があります。私はあなたの方法を使用してログインすることができましたが、別のページにアクセスしようとするたびに、再度ログインする必要があります。 – greg

0

は次のようにリクエストを送信します。

<?php 
$client->request(
    'GET', 
    '/', 
    array(), 
    array(), 
    array('PHP_AUTH_USER' => 'username', 'PHP_AUTH_PW' => 'pa$$word') 
); 

は、これは実際に本物の認証ヘッダ情報などの情報を送信します。