问题 如何在Symfony2功能测试中使用经过身份验证的用户?


我用 FacebookBundle 在我的Symfony2应用程序中验证用户身份。但是,我想用phpunit创建功能测试,它使用经过身份验证的用户。

此外,我不想使用facebook用户,而是使用一个用户。

有谁知道如何实现这个?


9520
2018-06-30 13:54


起源



答案:


它实际上非常简单。

  1. 建立 security.yml 用于测试环境(它是来自Symfony 2.0-RC3的片段)

    security:
        encoders:
            Symfony\Component\Security\Core\User\User: plaintext
    
        providers:
            in_memory:
                users:
                    user:  { password: userpass, roles: [ 'ROLE_USER' ] }
                    admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
    
        firewalls:
             secured-area:
                 pattern:    ^/demo/secured/
                 http_basic:
                     realm: "Secured Demo Area"
    
  2. 如您所见,已定义HTTP身份验证。所以现在,您所要做的就是在功能测试中设置客户端:

    $client = static::createClient(array(), array(
        'PHP_AUTH_USER' => 'user',
        'PHP_AUTH_PW'   => 'userpass',
    ));
    

此链接可能有用: http://symfony.com/doc/current/testing.html


16
2018-06-30 15:25



感谢您的回答。但是,我希望此用户拥有我的应用程序中使用的许多其他属性。例如,他们有一个$ facebookId属性。如何使用具有自定义属性的硬编码用户? - Reuven
如何为测试环境指定不同的安全配置?我希望能够将我的c wsse proviver改为基本的记忆。 - greg
@whistlergreg我相信你所要做的就是覆盖 security 定义 config_test.yml/.xml。 - Crozin
我试过了 You are not allowed to define new elements for path "security.providers". Please define all elements for this path in one config file. - greg
@whistlergreg然后移动导入 security.yml 从 config.yml 至 config_prod/dev.yml, 创建 security_test.yml 并导入它 config_test.yml。您可能还需要删除依赖项 config_dev.yml 从 config_test.yml。 - Crozin


答案:


它实际上非常简单。

  1. 建立 security.yml 用于测试环境(它是来自Symfony 2.0-RC3的片段)

    security:
        encoders:
            Symfony\Component\Security\Core\User\User: plaintext
    
        providers:
            in_memory:
                users:
                    user:  { password: userpass, roles: [ 'ROLE_USER' ] }
                    admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
    
        firewalls:
             secured-area:
                 pattern:    ^/demo/secured/
                 http_basic:
                     realm: "Secured Demo Area"
    
  2. 如您所见,已定义HTTP身份验证。所以现在,您所要做的就是在功能测试中设置客户端:

    $client = static::createClient(array(), array(
        'PHP_AUTH_USER' => 'user',
        'PHP_AUTH_PW'   => 'userpass',
    ));
    

此链接可能有用: http://symfony.com/doc/current/testing.html


16
2018-06-30 15:25



感谢您的回答。但是,我希望此用户拥有我的应用程序中使用的许多其他属性。例如,他们有一个$ facebookId属性。如何使用具有自定义属性的硬编码用户? - Reuven
如何为测试环境指定不同的安全配置?我希望能够将我的c wsse proviver改为基本的记忆。 - greg
@whistlergreg我相信你所要做的就是覆盖 security 定义 config_test.yml/.xml。 - Crozin
我试过了 You are not allowed to define new elements for path "security.providers". Please define all elements for this path in one config file. - greg
@whistlergreg然后移动导入 security.yml 从 config.yml 至 config_prod/dev.yml, 创建 security_test.yml 并导入它 config_test.yml。您可能还需要删除依赖项 config_dev.yml 从 config_test.yml。 - Crozin