Test fonctionnel foire mais sa fonctionne en test réel

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, bonsoir à tous,

Je développe une API Rest sous Symfony 3, j'ai écris mon premier controlleur et il est donc venu le temps d'écrire mes tests fonctionnel pour celui-ci.

J'ai donc écrit un code tout simple que voici:

1
2
3
4
5
6
7
8
<?php

public function testCget()
{
    $client = static::createClient();
    $client->request('GET', '/categories');
    $this->assertEquals(200, $client->getResponse()->getStatusCode());
}

Et ce test échoue en me disant que le code retourné est 500. Notez que le test sur le DefaultController (que j'ai pas encore enlevé ^^ ) lui fonctionne très bien.

Évidement, si je test moi même avec Postman il n'y a pas de problème, j'ai bien un code de retour 200.

Du coup j'ai chercher à en savoir plus et en récupérant le texte de la réponse je vois ceci:

Unable to find template "" (looked into: C:\projet\app/Resources/views, C:\projet\vendor\symfony\symfony\src\Symfony\Bridge\Twig/Resources/views/Form).
500 Internal Server Error - InvalidArgumentException
1 linked Exception:
Twig_Error_Loader

Que dois-je faire ?

Merci d'avance pour votre aide.
Cordialement, La source.

+0 -0
Auteur du sujet

Ben… normalement ^^ pour tout dire pour lancer phpunit je ne me casse pas la tête, je me place juste dans le répertoire du projet et je fais phpunit.

J'avais lu quelque par que si on disais rien phpunit sous Symfony était en mode dev, hors avec postman je suis en dev, sa c'est certain.

+0 -0
Auteur du sujet

Je lance symfony avec php bin/console server:run, puis en prod on a pas les token debug ^^ j'suis sur que les deux sont donc en mode test… sauf que les deux ne donne pas les mêmes résultats :(

+0 -0

Quand tu lances php bin/console server:run du démarre juste le serveur HTTP de développement de PHP. Cette commande prend un paramètre --env qui par défaut vaut dev. Tu peux t'en assurer en faisant un simple php bin/console server:run --help.

Donc si tu ne configures pas bien ton application, tu seras tout le temps en mode dev. Ton endpoint est donc app_dev.php. (cf FrameworkBundle/Resources/config/router_dev.php)

Auteur du sujet

J'ai rien configurer du tout encore puisque je suis en plein dev et très loin d'une version alpha.

Bref, ok je suis en mode dev, sa tombe bien c'est le mode qui m'intéresse… mais du coup je ne comprend pas l'erreur 500 que phpunit se prend alors qu'en test manuel sa fonctionne…

+0 -0
Auteur du sujet

Okay… je suis un âne ^^

Je suis au bureau du coup j'ai récup les sources et comme je n'avais pas Postman d'installé j'ai test directement depuis le navigateur et là j'ai remarqué que j'avais également l'erreur 500.
J'ai installé postman et lui il fonctionnait, du coup l'erreur était forcément quelque par dans la configuration, et même forcément au niveau d'un header http.

C'était tout simplement que plutôt que de mettre en format accepté json, xml et html je l'avais mis en format prioritaire… et manifestement il lit les formats de droite à gauche (donc le html qui appelait twig et pas de template associé)

Merci pour ton aide en tout cas :)

+0 -0

Haha, c'est un piège courant.

J'en ai même parlé à la fin de la partie Supporter plusieurs formats de requêtes et de réponses .

Je vais peut être le mettre sous balise important :)

L'ordre de déclaration est très important ici. Si une requête ne spécifie aucun format alors le serveur choisira du JSON.

Édité par BestCoder

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte