我正在尝试使用 symfony.com 上描述的以下技术:http://symfony.com/doc/current/cookbook/testing/http_authentication.html 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 的用户 tester,因为我也可以通过浏览器使用该帐户登录。
我可以使用安全控制器测试中的以下代码:
$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 身份验证模拟现在不起作用或工作方式不同?