Authentication 在Symfony2单元测试中处理身份验证

Authentication 在Symfony2单元测试中处理身份验证,authentication,symfony,Authentication,Symfony,我想为通过Symfony2身份验证机制保护的控制器编写功能测试。我读了很多介绍它的教程,但不幸的是,所有这些教程都不适用于我当前的Symfony2版本(测试版本为2.0.4到2.0.7) 到目前为止我所做的: 在config_test.yml中添加安全设置 security: encoders: Symfony\Component\Security\Core\User\User: plaintext providers: main:

我想为通过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)。有人能帮我做错事吗

12月16日更新

我更进一步了。因为我在我的常规安全文件中使用表单登录。Symfony刚刚将http_基本登录添加到防火墙。这就是重定向的原因(302)。我刚刚加了一个

form_login: false

以测试安全设置。现在没有重定向,但我得到了一个401状态代码。

我显示HTTP basic auth应该作为请求的第四个参数,而不是第五个参数。来源是文档-如果它们不工作,我们需要更新它们。但请让我知道:


另外,一旦这个功能正常工作,就可以重新打开表单验证,因为Symfony没有任何理由使用表单的入口点(在我的例子中,问题是测试环境使用单独的数据库,但我忘记了用users.m填充它)

我知道,这可能不是你问题的真正解决方案,但让我们看看,如果每个人都有相同的问题,我们会得到多少选票。如果没有人这么做,我是唯一一个这么愚蠢的人


顺便说一句,您可以尝试使用内存中的提供程序来查看身份验证是否由于数据库问题或类似问题而失败。这就是我发现问题所在的原因。

302是重定向。你能检查一下你重定向到了哪里吗?@kuba这是对登录表单的重定向(表单登录是我应用程序中身份验证的常规方式)。我解决了重定向问题,但现在我有了状态代码401