2012-01-27 94 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') 
); 

这实际上发送信息真实身份验证标头信息。