如何在功能测试中模拟 HTTP Authentication

3.4 版本
维护中的版本

如果你的程序需要HTTP认证方式,把username和password作为服务器变量传到 createClient()

1
2
3
4
$client = static::createClient(array(), array(
    'PHP_AUTH_USER' => 'username',
    'PHP_AUTH_PW'   => 'pa$$word',
));

你也可以在每次请求的基本信息中覆写它:

1
2
3
4
$client->request('DELETE', '/post/12', array(), array(), array(
    'PHP_AUTH_USER' => 'username',
    'PHP_AUTH_PW'   => 'pa$$word',
));

当你在程序中使用 form_login 时,可以通过让test配置信息“利用HTTP认证”来简化测试。这样一来你就可以使用上面(的代码)在测试中完成(表单方式的)认证,却仍然能令用户通过常规的 form_login 来登录。这一技巧是将防火墙里的 http_basic 键包容进来,连同 form_login 键一起:

1
2
3
4
5
# app/config/config_test.yml
security:
    firewalls:
        your_firewall_name:
            http_basic: ~
1
2
3
4
5
6
<!-- app/config/config_test.xml -->
<security:config>
    <security:firewall name="your_firewall_name">
      <security:http-basic />
   </security:firewall>
</security:config>
1
2
3
4
5
6
7
8
// app/config/config_test.php
$container->loadFromExtension('security', array(
    'firewalls' => array(
        'your_firewall_name' => array(
            'http_basic' => array(),
        ),
    ),
));

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)