Câblage des tests d’intégration Ava.js avec Express, Gulp, mais pas Supertest.

Gulp, le système de génération de flux pour le code source JavaScript ne nécessite probablement pas d’introduction, et vous l’avez probablement configuré, utilisé pour exécuter un projet, ou du moins en avez entendu parler parmi la pléthore d’outils de construction comme grunt , webpack et brocoli (oui, c’est un vrai projet JavaScript. Je sais).

En travaillant sur mon nouveau projet parallèle, j’avais besoin de configurer une configuration des intégrations de test qui connecterait Ava pour exécuter des tests d’intégrations. Pour cela, je devais également mettre en place le serveur réel avec les bases de données afin qu’il puisse traiter les API.

Si vous utilisez toujours Mocha, je vous recommande vivement d’essayer Ava, ou du moins de passer à Tape. Ils sont dans un contexte similaire mais un paradigme totalement différent.

Certaines approches na i cinq pour le configurer ont toutes été envisagées, mais elles ne l’ont pas fait pour moi pour différentes raisons. Voici un aperçu du processus que j’ai examiné:

Supertest

En utilisant supertest, je pourrais envelopper ExpressJS sur un port éphémère, partager cette instance parmi tous les tests. Cela pourrait fonctionner mais je n’ai pas aimé parce que:

Rejetant donc Supertest et Superagent, je suis parti à la recherche d’une autre alternative, avec un peu de chance avec une bibliothèque plus prometteuse comme Axios (oui oui, jeu de mots vraiment prévu!)

Réflexion sur l’architecture

Il est rapidement apparu clairement que je souhaitais dissocier le flux des tests d’intégration, ce qui signifie que les tests ou le testeur n’auront pas besoin de connaître ou de se soucier de la mise en service du serveur. Il est plus propre et le rend plus évolutif si, dans certains cas, je souhaite avoir un serveur de test dédié sur lequel le test sera exécuté et un autre serveur sur lequel les tests d’intégration s’exécuteront.

Avalez

Donc, avant de passer à la solution évidente avec Gulp, examinons rapidement d’autres approches viables:

L’inconvénient de simultanément est que cela peut prendre quelques secondes pour mettre le serveur en marche alors que les tests vont déjà tourner, donc échouer.

L’autre option:

Techniquement, cela fonctionne mais il y a une odeur de code partout. Qui sait si 5 secondes suffisent, et si parfois cela ne prend que 2 secondes pour mettre le serveur en place, je perds 3 secondes sans raison.

Le temps que vous attendez que les tests s’exécutent est le temps que vous n’écrivez pas de code, sauf si vous utilisez Wallaby.js. Hah!

Donc, Gulp est une solution naturelle pour faire tourner le serveur et exécuter les tests d’intégration sur le même hôte, ce qui, grâce au plugin gulp-ava , en fait un jeu d’enfant car bien.

Une implémentation approximative est la suivante:

Derniers mots

Essayez Ava, c’est une beauté, et n’oubliez pas de tester le test.