Si è verificato un problema durante il tentativo di eseguire un test dell'unità basato su controller su un metodo controller che implementa Sessions.PHPUnità fallita con Symfony2 Sessions
In questo caso, qui è il metodo di controllo:
/**
* @Route("/api/logout")
*/
public function logoutAction()
{
$session = new Session();
$session->clear();
return $this->render('PassportApiBundle:Login:logout.html.twig');
}
E il test funzionale:
public function testLogout()
{
$client = static::createClient();
$crawler = $client->request('GET', '/api/logout');
$this->assertTrue($client->getResponse()->isSuccessful());
}
L'errore che viene prodotto:
Failed to start the session because headers have already been sent. (500 Internal Server Error)
ho provato inserendo $this->app['session.test'] = true;
nel test, ma ancora non andare. Qualcuno ha provato a risolvere un problema come questo all'unità che testava un controller che utilizzava una sessione?
Se si guarda il test per la classe 'Session' (https://github.com/symfony/symfony/blob/2.1/src/Symfony/Component/HttpFoundation/Tests/Session/SessionTest.php), sembra che dovresti iniettare un'istanza di 'MockArraySessionStorage' per evitare di iniziare la sessione. – Sven
Ho impostato quelle linee, tuttavia, come faccio a passare a '$ client = static :: createClient();'? L'aggiunta di queste righe comporta lo stesso errore. –
Sì, il problema è che il controller non offre l'iniezione di nulla. L'operazione 'new' non ha parametri e non ci sarebbe comunque modo di passare nulla dal test. Ma penso che Symfony 2 dovrebbe essere in grado di rendere utilizzabile il framework DI per questo. Hai letto per esempio questo: http://stackoverflow.com/questions/10106195/symfony-2-dependency-injection-di-of-controllers Inoltre, i documenti Symphony suggeriscono di arrivare alla Sessione in questo modo: '$ session = $ this-> getRequest() -> getSession(); '- questo potrebbe abilitare il bootstrap PHPUnit per usare gli oggetti di sessione fittizi – Sven