symfony - 如何在 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
}
}
解决方案
我的错,我的解决方案很好,我只是导入了错误的 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);
}
}
推荐阅读
- powershell - Powershell重命名文件,名称中间有序号
- javascript - Firebase 无法加载默认凭据
- python - 运算符不存在:字符变化 = 整数
- ios - UIDocumentPickerViewController 打开特定路径
- jquery - 自定义pdf工具栏添加签名等功能
- video - 视频 - 如果我的播放器仅支持 MP4(渐进式)并且没有自适应流媒体协议(例如:SMOOTH、HLS 或 DASH),会发生什么?
- visual-studio - 从 Windows Visual Studio 构建的 Xamarin iOS 启动画面
- .net-core - 抛出 FunctionTimeoutException 后自动重新调度 TimerTrigger
- reactjs - 使用 react 和 react-router-dom对关键字“state”进行类型声明
- twilio - 无法在 Pycharm 上导入 Twilio 包