我试图在实现会话的控制器方法上运行基于控制器的单元测试时遇到问题。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