Tests e2e
Tests end-to-end
Idéalement on aura la possibilité de tester notre API, et pas juste des modules au sein de notre API.
C'est-à-dire, on envoie des requêtes HTTP et on évalue les réponses.
Cela veut dire qu'il faut lancer notre serveur et créer de requêtes HTTPS et recevoir des réponses. Comment faire ?
Grâce à une conception intelligente, nous avons créé deux fonctions StartServer
et StopServer
dans src/servce_manager.ts
qui nous permettent de démarrer et d'arrêter le serveur.
Avec cette structure on peut facilement lancer un serveur à partir de nos tests.
Outil pour lancer le serveur
Nous créons un outil qui permet de lancer et arrêter le serveur dans test/utility/TestServer.ts
:
Ce script lance simplement le serveur et lui garde sa référence.
Vous remarquerez la variable START_HOST
. En effet, nous allons lancer le serveur seulement si cette variable est présente. Pourquoi ?
Pour nos tests locaux, nous allons affecter une valeur à
START_HOST
pour lancer un serveur.A terme, nous allons compiler un artifact de notre API en forme de container Docker, qui sera lancé tout seul. On aimerait lancer nos tests e2e qui vont plutôt envoyer les requêtes à ce container. Dans ce cas, pas besoin de lancer notre serveur en local.
Du coup, nous allons ajouter quelques valeurs à notre fichier test/.env.test
:
Cela pour indiquer qu'il faut lancer le serveur. Aussi, nous précisons le port d'écoute du serveur, ainsi que l'adresse HTTP où on peut trouver notre API.
Le test e2e
Ensuite, dans un test e2e pour un utilisateur /test/e2e/suites/User.test.ts
, on peut le lancer et fermer dans les hooks before
et after
:
À noter, dans chaque test, on utilise la librairie axios
afin de créer et envoyer des requêtes HTTP. Il faut installer le package :
Enfin, pour simplifier cette démo, nous avons désactivé la sécurité sur la route /user
. Dans la réalité, votre test devrait d'abord se connecter avec un utilisateur que vous avez défini dans vos données de départ, puis effectuer le test e2e. Dans src/controllers/UserController.ts
:
Lancer nos tests e2e
Avant de lancer le test e2e, nous allons ajouter 2 scripts à notre package.json
:
Comme avant, on ajoute une qui utilise env-cmd
pour charger les variables d'environnement et un autre sans.
Vous pouvez maintenant lancer les tests e2e:
Avec le résultat :
Notez comment on a testé une réponse négative, et qu'un code 400 est retourné.
La suite
Nos tests sont bien en place !
On est prêt à avancer dans la configuration de Continuous Integration.
Dernière mise à jour