首页 > 解决方案 > Symfony:在功能测试中验证用户

问题描述

我正在尝试在功能测试中对用户进行身份验证,以检查他是否被重定向。

我的控制器:

public function preRegisterAction()
{
    if ($this->getUser() instanceof User) {
        return new RedirectResponse();
    }

    return $this->render(
        'pages/pre-register.html.twig'
    );
}

我的测试:

public function setUp()
{
    $this->client = static::createClient();
}

public function testPreRegisterAction()
{
    $user = new User();
    $user->setEmail('test@test.fr');
    $user->setCreated(new \DateTime());
    $user->setId(43);

    $tokenStorage = $this->client->getContainer()->get('security.token_storage');
    $tokenStorage->setToken(new UsernamePasswordToken($user, null, 'main', ['ROLE_USER']));

    $this->client->request('GET', '/choix');
    $this->assertTrue($this->client->getResponse()->isRedirection());
}

我不知道使用断言是否可以。但即使使用令牌存储似乎也不起作用。当我在控制器中执行令牌存储的 var_dump 时,我看不到我在测试中注入的用户。

标签: symfony

解决方案


我不确切知道为什么您的代码在测试中不起作用。我对安全组件没有深入的了解,但是有两种推荐的方式来验证用户。

  1. 仅对测试使用更快的身份验证机制
  2. 创建身份验证令牌

推荐阅读