2012-01-27 98 views
4

我試圖使用上symfony.com描述了以下技術:http://symfony.com/doc/current/cookbook/testing/http_authentication.html 以試圖在功能測試,要求用戶控制器,用於在被記錄Symfony2中:無法模擬的功能測試HTTP認證

到目前爲止,我的登錄表單正在工作,我可以登錄,並且Symfony2調試Web工具欄將我的用戶顯示爲已驗證身份。另外,我已經爲登錄過程本身編寫了功能測試,這已經過去了。所以我現在通過兩種方案,即我的登錄正在工作。

我遇到的唯一問題,就是試圖模擬像這樣對其他控制器HTTP認證時:

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

我可以通過檢查$客戶端看到的,我被重定向到我的登錄頁面,那一刻我嘗試這樣:

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

我知道,與密碼testpass用戶測試存在於數據庫,因爲我可以通過瀏覽器使用該帳戶登錄也是如此。

我可以從安全控制器測試使用下面的代碼:

$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驗證模擬現在不起作用或工作方式不同?

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認證不會在這裏工作,除非我改變我的config_test.yml一些安全設置,以允許HTTP:

回答

5

關於它的思考,我可能會使用以下設置方法只是做登錄認證。

自我注意:HTTP認證與使用Doctrine用戶提供者不同!

+0

我遇到了同樣的問題。我設法使用你的方法登錄,但每次我嘗試訪問另一個頁面時,我必須再次通過登錄,最終導致我陷入循環。 – greg 2012-07-18 18:07:55

0

發送您的要求是這樣的:

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

這實際上發送信息真實身份驗證標頭信息。