2017-08-08 61 views
0

會議Accoring的文檔,我想在我的PHPUnit測試嘲笑會話:測試與symfony的

public function testAction() 
{ 
    $session = new Session(new MockArraySessionStorage()); 
    $session->set('abc', 'xyz'); 
    $client = static::createClient(); 
    $client->getContainer()->set('session', $session); 
    $client->request('GET', '/'); 
} 

而在我的控制器,我試圖讓會話值:

public function mainAction() 
{ 
    $session = $this->get('session'); 
    var_dump($session->get('abc'), $session->all());die; //returns null and [] 
} 

爲什麼這個東西不起作用?

回答

0

我相信這是因爲會話是用cookie解析的,並且您不會設置將會話鏈接到客戶端的cookie。

您應該添加:

$client->getCookieJar()->set(new Cookie($session->getName(), $session->getId())); 

有登錄用戶一個完整的例子:

$session = $this->_container->get('session'); 
    $user = $this->_em->getRepository('UserBundle:User') 
         ->findOneByEmail($email); 
    $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles()); 
    $session->set('_security_<security_context>', serialize($token)); 
    $session->save(); 
    $client->getCookieJar()->set(new Cookie($session->getName(), $session->getId())); 

希望它能幫助