我试图测试一个预处理表单并最终保存它的服务。在创建表单中:验证Symfony3-Test服务
$this->container->get('security.token_storage')->getToken()->getUser();
被调用以获取当前登录的用户作为字段的默认值。
现在我有这个(扩展Symfony\Bundle\FrameworkBundle\Test\WebTestCase
):
private $pages;
private $formFactory;
protected function setUp()
{
self::bootKernel();
$client = self::$kernel->getContainer()->get('test.client');
$client->setServerParameters([
'HTTP_HOST' => 'ajax.localhost.dev:10190',
'CONTENT_TYPE' => 'application/json',
'HTTP_X-Requested-With' => 'XMLHttpRequest',
'HTTP_USER_AGENT' => 'Symfony/2.0',
'PHP_AUTH_USER' => 'root',
'PHP_AUTH_PW' => '[email protected]'
]);
$this->pages = self::$kernel->getContainer()->get('app.pages');
$this->formFactory = self::$kernel->getContainer()->get('form.factory');
}
public function testNewPage() {
$page = new Page();
//shortened
$form = $this->formFactory->create(PageType::class, $page);
}
但是,这给我的错误:
Call to a member function getUser() on null
什么表明,不存在安全令牌。
我该怎么过来?
UPDATE
由于@LBA的意见,我试过了代码,没有运气:
$session = self::$kernel->getContainer()->get('session');
$token = new UsernamePasswordToken('root', 'root', 'main', ['ROLE_USER', 'ROLE_ROOT']);
$session->set('_security_main', serialize($token));
$session->save();
与设置cookie所描述here丢失,因为$kernel
有一部分没有方法getCookieJar()
你确定你有一个登录后的用户? – LBA
@LBA请参阅最新的代码。通过将选项数组传递给'bootKernel()'我错了。但是这也行不通。 – philipp
仍然我不明白您的用户应该如何登录 - 如何在您的应用程序中完成登录?您不会将每个请求的用户名和密码作为服务器参数/标头发送,对吗? – LBA