Bonjour,
Je développe actuellement une appli avec symfony. après la phase de tests unitaires, j'en suis à la phase de tests fonctionnels, toujours avec Phpunit et le WebTestCase de Symfony.
Alors que tout fonctionne bien en faisant les tests dans le navigateur, je n'arrive pas à tester mes formulaires (et toutes mes requêtes POST) car les données envoyées ne sont pas reçues par mon contrôleur...

Voici le code de mon test :
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
 
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
 
 
class TokenControllerTest extends WebTestCase
{
    public function testIndex()
    {
        $client = static::createClient();
        $crawler = $client->request('GET', '/token');
 
 
        $this->assertContains('Token list', $crawler->html());
        $this->assertContains('Create token', $crawler->html());
    }
 
 
    public function testGenerateToken()
    {
        $client = static::createClient();
        $client->request('POST', '/token/generate', [
            'allCommands' => true
        ]);
 
        var_dump($client->getRequest()->request);
 
        $this->assertTrue($client->getResponse()->isSuccessful());
    }
}

le test testIndex() passe avec succès mais le testGenerateToken() est en erreur car le controleur ne reçoit pas de donnée POST et il renvoie donc une erreur 500.
j'ai essayé diverses méthodes pour envoyer ma requête POST (get sur la page du formulaire puis remplir le formulaire et faire un submit, passer les données du formulaire dans la fonction submit) et j'ai dans tous les cas la même erreur...

Voici les dumps de la requête envoyée par le web test case et le dump de la requête reçue par le controleur :

Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// dans le test : 
var_dump($client->getRequest()->request);
/*
object(Symfony\Component\HttpFoundation\ParameterBag)#618 (1) {
  ["parameters":protected]=>
  array(1) {
    ["allCommands"]=>
    bool(true)
  }
}
*/
 
//=============//
// dans le controleur
$request = Request::createFromGlobals();
var_dump($request->request);
/*
object(Symfony\Component\HttpFoundation\ParameterBag)#647 (1) {
  ["parameters":protected]=>
  array(0) {
  }
}
*/

les données POST sont donc bien envoyées par le client de test mais le controleur ne reçoit rien...
j'ai également essayé de poster le formulaire en utilisant le navigateur en environnement de test et tout fonctionne correctement, ce n'est donc pas à priori un priblème de configuration de l'environnement d'exécution.

Est-ce que quelqu'un a une idée de comment résoudre le problème ?