我想为通过Symfony2身份验证机制保护的控制器编写功能测试。我读了很多描述它的教程,但不幸的是,所有的教程都不适用于当前的Symfony2版本(测试了2.0.4到2.0.7)。
我到目前为止所做的事:
在config_test.yml中添加安全设置
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
providers:
main:
users:
admin: { password: adminsmurf, roles: [ 'ROLE_USER' ] }
inventory: { password: inventorysmurf, roles: [ 'ROLE_ADMIN', 'ROLE_USER', 'ROLE_INVENTORY' ] }
andon: { password: andonsmurf, roles: [ 'ROLE_ADMIN', 'ROLE_ANDON' ] }
firewalls:
main:
pattern: /.*
http_basic:
realm: "Secured Area"
provider: main
logout: true
security: true
stateless: true
anonymous: true单元-测试
class DefaultControllerTest extends WebTestCase
{
public function testCorrectAuthentificationCredentials()
{
$client = static::createClient();
$crawler = $client->request('GET', '/inventory/index', array(), array(),
array(
'PHP_AUTH_USER' => 'admin',
'PHP_AUTH_PW' => 'adminsmurf'
));
$response = $client->getResponse();
$this->assertEquals(200, $response->getStatusCode());
}
}此测试失败(预期为200,获取302)。有人能帮我做错事吗?
更新16/12
我又走了一步。因为我在常规安全文件中使用表单登录。Symfony刚刚将http_basic登录添加到防火墙。这就是重定向的原因(302)。我刚加了一个
form_login: false到测试安全设置。现在没有重定向,但我得到401状态代码作为结果。
发布于 2011-12-16 15:44:30
我正在说明,应该作为请求的第四个参数,而不是第五个参数。源是文档--如果它们不能工作,我们需要更新它们。但请告诉我:
http://symfony.com/doc/2.0/cookbook/testing/http_authentication.html
而且,一旦正确工作,就可以重新打开表单,因为Symfony没有任何理由使用表单的入口点(<-花哨字:)来重定向您。
希望这能帮上忙!
发布于 2013-09-13 15:50:12
在我的例子中,问题是测试环境使用一个单独的数据库,但是我忘记了用用户填充它。m)
我知道,这可能并不能真正解决你的问题,但是让我们看看,如果每个有相同问题的人都投票的话,这会得到多少支持。如果没人这么做,我是唯一一个这么蠢的人。
顺便说一句,您可以尝试内存中的提供程序来查看您的身份验证是否由于数据库问题等原因而失败。所以我才发现我的问题是什么。
https://stackoverflow.com/questions/8522432
复制相似问题