PHPUnit et Sessions symfony
Bonjour à tous,
J'essaie depuis peu de me mettre au Test Driven Development avec Symfony. Jusque là dans mon projet tout allait bien, j'ai pu travailler sur le modèle de données, les différents services de mon projet et je suis en train de finir ce dernier par les controleurs, cependant c'est là ce que cela coince.
Mon test le plus basic vérifie une redirection 301 (l'ensemble du projet sera en HTTPS donc je test le basculement sur ce canal). Ensuite il vérifie un code HTTP 200 et l'existence d'un bouton dans le contenu de la page. Cependant mon test échoue lors de la deuxième assertions.
Code:
1 2 3 4 5 6 7 8 9 10
|
public function testIndexAction()
{
$client = static::createClient();
$client->request('GET', '/');
$this->assertEquals(301, $client->getResponse()->getStatusCode());
$crawler = $client->followRedirect();
$this->assertEquals(200, $client->getResponse()->getStatusCode());
$this->assertContains('Faire une nouvelle commande', $crawler->filter('.btn-centered')->text());
} |
Coté controlleur, le code n'est pas très complexe, mais initie une session PHP et c'est ca qui fait planter mon test, le serveur retourne un code 500 au lieu de 200 avec un message "headers already sent by output...".
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
/**
* @Route("/{_locale}", requirements={"_locale" = "fr|en"}, defaults={"_locale" = "fr"}, name="homepage")
*/
public function indexAction(Request $request,$_locale)
{
$request->setLocale($_locale);
$session = new Session();
if($session->has('app')){ $session->remove('app'); }
return $this->render('steps/welcomeStep.html.twig');
} |
Ma question est de deux ordres:
- Premièrement comment faire en sorte que mon controlleur puisse utiliser les sessions dans l'environnement de test sans problème
- Deuxièmement, lors de futur tests où j'aurai besoin d'éléments en session, comment les mettre en place pour que l'action du contrôleur puisse les voir et les utiliser.
Je n'ai vraiment trouvé que peu d'infos là dessus et même la doc symfony ne me parait pas claire (https://symfony.com/doc/current/comp...n_testing.html). N'arrivant vraiment pas à comprendre que faire pour que cela fonctionne je souhaiterai un petit coup de pouce
Pour info, mon config_test.yml est configuré par défaut concernant les sessions
Code:
1 2 3 4 5 6 7 8 9 10
|
imports:
- { resource: config_dev.yml }
framework:
test: ~
session:
storage_id: session.storage.mock_file
profiler:
collect: false |
Je vous remercie d'avance pour tout élément apporté pour éclairer ma lanterne.