【发布时间】:2011-12-15 15:25:41
【问题描述】:
我想为通过 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 状态码。
【问题讨论】:
-
302 是一个重定向。你能检查一下你被重定向到哪里了吗?
-
@kuba 它是对登录表单的重定向(表单登录是我的应用程序中进行身份验证的常规方式)。
-
我解决了重定向问题,但现在我有一个状态码 401