我试图使用上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:
我遇到了同样的问题。我设法使用你的方法登录,但每次我尝试访问另一个页面时,我必须再次通过登录,最终导致我陷入循环。 – greg 2012-07-18 18:07:55