我正在我的Symfony2应用程序中进行一些功能测试,并希望通过检查只有具有相应角色的用户可以访问我的控制器操作来断言控制器安全性。我已经设置了两个具有不同角色的用户,这些用户使用基本凭据进行身份验证:
providers:
in_memory:
users:
basic: { password: basic, roles: ROLE_BASIC }
admin: { password: admin, roles: ROLE_ADMIN }
我不想将这些用户硬编码到我写的每个测试中(我会写很多)。理想情况下,我想从容器中获取我在配置中定义的用户的详细信息。这可能吗? I.E.而不是这样做:
$crawler = $client->request('GET', '/inventory/index', array(), array(),
array(
'PHP_AUTH_USER' => 'admin',
'PHP_AUTH_PW' => 'admin'
));
我想这样做:
// Get the user details from the container
$users = $this->container->get('something');
$user = $users['admin'];
$crawler = $client->request('GET', '/inventory/index', array(), array(),
array(
'PHP_AUTH_USER' => $user->getUsername(),
'PHP_AUTH_PW' => $user->getPassword()
));
答案 0 :(得分:2)
如果您处于测试环境中并且不想深入研究复杂的东西,真的最简单的方法是使用Yaml解析器解析包含内存提供程序的文件,并且用它来满足你的客户要求。
使用LiipFunctionalTestBundle会强制您定义一个和仅一个用户进行连接。 此外,它会强制您复制此信息,一次在安全提供程序部分,一次在DI参数中。
最后一个选项是定义您自己的服务,该服务使用私有安全服务来配置自身。与简单的yaml解析相比,这要复杂得多且难以管理:)。
答案 1 :(得分:1)
查看LiipFunctionalTestBundle,特别是基本WebTestCase
班级here。
我没有亲自使用此捆绑包,但它声称在您的测试用例中考虑了身份验证。
<强>更新强>
最好将用户加载为固定装置而不是内存装置。如果您没有使用数据库,请设置LiipFunctionalTestBundle
以使用SQLite。这样,您就可以在测试中访问每个用户。
此外,尽管可能不推荐,但您可以通过执行以下操作随时更改liip_functional_test.authentication
:
$this->getContainer()->setParameter('liip_functional_test.authentication', 'new_value');