Test fonctionnel foire mais sa fonctionne en test réel

Le problème exposé dans ce sujet a été résolu.

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

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

Le WebTestCase boot par défaut une instance du Kernel avec l'environnement test. Tu risques donc d'avoir des réponses différentes en testant avec Postman à moins que tu rajoutes dans ton url app_test.php.

Voici des explications de la documentation officielle de Symfony : Doc

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)

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

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.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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