我正在尝试使用symfony.com上描述的以下技术:http://symfony.com/doc/current/cookbook/testing/http_authentication.html 试图在功能上测试需要用户登录的控制器。
到目前为止,我的登录表单正常工作,我可以登录,Symfony2调试Web工具栏显示我的用户已通过身份验证。另外,我已经为登录过程本身编写了一个功能测试,这个过程。所以我现在通过两种方案,我的登录工作正常。
我遇到的唯一问题是尝试模拟HTTP身份验证,就像其他控制器一样:
$client = static::createClient(array(), array(
'PHP_AUTH_USER' => 'tester',
'PHP_AUTH_PW' => 'testpass',
));
我可以通过检查$ client看到我被重定向到我的登录页面,我尝试这样的那一刻:
$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身份验证模拟现在不起作用或工作方式不同?
答案 0 :(得分:5)
考虑一下,我可能只是使用以下setUp方法进行登录:
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身份验证。
自我注意:HTTP身份验证与使用Doctrine用户提供程序不同!!!
答案 1 :(得分:0)
发送您的请求:
<?php
$client->request(
'GET',
'/',
array(),
array(),
array('PHP_AUTH_USER' => 'username', 'PHP_AUTH_PW' => 'pa$$word')
);
这实际上将信息作为真实的身份验证标头信息发送。