Как внедрить пользователя в TokenStorage во время KernelTestCase - PullRequest
1 голос
/ 04 мая 2019

Один из моих слушателей событий использует 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
    }
}

1 Ответ

1 голос
/ 04 мая 2019

Мое плохое, решение у меня было в порядке, я просто импортировал неправильный 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); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...