我試圖在實現會話的控制器方法上運行基於控制器的單元測試時遇到問題。PHPUnit與Symfony2會話失敗
在這種情況下,這裏是控制器方法:
/**
* @Route("/api/logout")
*/
public function logoutAction()
{
$session = new Session();
$session->clear();
return $this->render('PassportApiBundle:Login:logout.html.twig');
}
和功能測試:
Failed to start the session because headers have already been sent. (500 Internal Server Error)
我試着:
public function testLogout()
{
$client = static::createClient();
$crawler = $client->request('GET', '/api/logout');
$this->assertTrue($client->getResponse()->isSuccessful());
}
所產生的誤差置入$this->app['session.test'] = true;
進入測試,但仍然沒有去。有沒有人試圖解決這樣的問題來單元測試使用會話的控制器?
如果你看一下'Session'類的測試(https://github.com/symfony/symfony/blob/2.1/src/Symfony/Component/HttpFoundation/Tests/Session/SessionTest.php),它看起來應該注入一個'MockArraySessionStorage'實例來避免啓動會話。 – Sven
我設置了這些行,但是,如何將它傳遞給'$ client = static :: createClient();'?單獨添加這些行會導致相同的錯誤。 –
是的,問題是您的控制器不提供任何注入。 'new'操作沒有參數,並且無論如何都無法傳遞測試中的任何內容。但我認爲Symfony 2應該能夠使它成爲可用於此的DI框架。你有沒有讀過這樣的例子:http://stackoverflow.com/questions/10106195/symfony-2-dependency-injection-di-of-controllers另外,Symphony文檔建議像這樣進入Session:'$ session = $ this-> getRequest() - > getSession();' - 這可以使PHPUnit引導使用模擬會話對象 – Sven