[英]Symfony functional test - controller method getUser returns null
[英]$this->getUser() in Symfony controller functional test returns null
我正在嘗試測試使用$ this-> getUser()-> getUsername()的控制器。 它抱怨說getUsername()是在null上調用的。
這是我來自測試類的客戶登錄代碼
protected function logInAsAdmin(Client $client): void
{
$session = $client->getContainer()->get('session');
$firewallName = 'main';
$firewallContext = 'main';
$roles = [
'ROLE_USER',
'ROLE_ADMIN',
];
$token = new UsernamePasswordToken('admin', null, $firewallName, $roles);
$session->set('_security_' . $firewallContext, serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$client->getCookieJar()->set($cookie);
}
這是控制器的作用:
public function home(EmployerRepository $employerRepository, AuthorizationCheckerInterface $authorizationChecker): Response
{
if ($authorizationChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
$jobs = [];
foreach ($employerRepository->findBy(['owner' => $this->getUser()->getUsername()]) as $employer) {
$jobs = array_merge($jobs, $employer->getJobs()->toArray());
}
return $this->render('home.html.twig', ['jobs' => $jobs]);
}
return $this->redirectToRoute('login');
}
誰能告訴我為什么這不起作用? 我嘗試實例化一個用戶對象,並將其傳遞給UsernamePasswordToken,但也沒有運氣。
使用Symfony 4。
考試:
/**
* @test
*/
public function indexPageIsRenderedWhenLoggedIn(): void
{
$client = static::createClient();
$this->logInAsAdmin($client);
$client->request('GET', '/');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
$this->assertRegExp('/Your jobs/', $client->getResponse()->getContent());
}
嘗試從logInAsAdmin函數返回$ client
protected function logInAsAdmin(Client $client): Client
{
$session = $client->getContainer()->get('session');
$firewallName = 'main';
$firewallContext = 'main';
$roles = [
'ROLE_USER',
'ROLE_ADMIN',
];
$token = new UsernamePasswordToken('admin', null, $firewallName, $roles);
$session->set('_security_' . $firewallContext, serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$client->getCookieJar()->set($cookie);
return $client;
}
並在測試中使用:
/**
* @test
*/
public function indexPageIsRenderedWhenLoggedIn(): void
{
$client = static::createClient();
$client = $this->logInAsAdmin($client);
$client->request('GET', '/');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
$this->assertRegExp('/Your jobs/', $client->getResponse()->getContent());
}
想讓所有人都知道我通過將TokenStorageInterface
注入控制器中並通過$tokenStorage->getToken()->getUsername()
獲取用戶名來解決了我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.