首页 > 解决方案 > 如何在 KernelTestCase 期间将用户注入 TokenStorage

问题描述

我的一个事件监听器TokenStorageInterface用于访问当前用户。

在我的 KernelTestCase(不是WebTestCase)期间,也调用了此事件侦听器,但现在没有用户登录。

如何在我的测试中手动注入用户?

这不起作用:

class MyTest extends KernelTestCase
{
    /** @var User */
    private $u; // loaded in setup() 

    public function testSimple()
    {
        $tokenStorage = static::$container->get(TokenStorageInterface::class);

        $token = new UsernamePasswordToken($this->u->getUsername(),null, 'main', ['ROLE_ADMIN']);
        self::$kernel->getContainer()->get('session')->set('_security_main', serialize($token)); // does not work
        $tokenStorage->setToken('', $token); // does not work as well
    }
}

标签: symfonysymfony4

解决方案


我的错,我的解决方案很好,我只是导入了错误的 TokenStorageInterface。这是一个完整的工作示例:

use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;

class MyTest extends KernelTestCase
{
    /** @var User */
    private $u; // loaded in setup() 

    public function testSimple()
    {
        $tokenStorage = static::$container->get(TokenStorageInterface::class);
        $token = new UsernamePasswordToken($this->u, null, 'main', ['ROLE_ADMIN']);
        $tokenStorage->setToken($token); 
    }
}

推荐阅读