Skip to main content

6 étapes pour refactoriser un test Jest

Écrit par

4 septembre 2019

0 minutes de lecture

Jest propose une fonctionnalité méconnue qui permet de personnaliser la gestion des erreurs d’assertion affichées dans la console en cas d’échec des tests. Imaginons le code de test suivant, qui doit parcourir un objet par programmation pour vérifier que les clés attendues existent (à l’aide de la fonction expect) :

Éditeur de code sombre affichant un test Jest qui vérifie que les fichiers JavaScript ont les classes d’application correspondantes.

Le test est bien écrit. Imaginons maintenant qu’un membre de l’équipe apporte des modifications au code : il ajoute un nouveau fichier à un endroit, mais oublie de l’ajouter ailleurs, dans une partie importante du même projet, par exemple là où il faut s’assurer que le fichier est correctement exporté.

Lors de la prochaine exécution du test, celui-ci échouera. Pourtant, la raison ne sera pas évidente pour la plupart des gens ; et si vous découvrez le code, vous ne saurez probablement même pas ce qui a échoué. Essayez :

Éditeur de code sombre affichant l’échec d’un test Jest : validators doivent être exportés, avec Received: undefined et une erreur d’assertion à la ligne 13.

C’est pourquoi Jest exige également d’utiliser toHaveProperty() avec expect, comme ceci :

Éditeur de code en thème sombre affichant du JavaScript qui extrait un nom de classe de chaque nom de fichier et teste la propriété attendue.

Désormais, en cas d’échec d’un test, il est au moins plus facile de repérer la propriété manquante. Mais le résultat reste assez obscur, comme le montre la capture d’écran suivante. Que peut-on faire ? ?

Éditeur de code sombre affichant l’échec d’un test Jest indiquant que toutes les classes de validation doivent être exportées depuis index.js.

À ce stade, les annotations déjà présentes pourraient suffire. Comme vous pouvez le constater, le nom du test est explicite. Mais un seul cas de test échoue, et lorsqu’on examine la trace du test, il est difficile de déterminer clairement quels validateurs ont été utilisés.

Refactorisons le code :

Éditeur de code au thème sombre affichant des tests Jest qui vérifient que les classes de validation sont exportées depuis index.js

Désormais, que mon test réussisse ou échoue, il est beaucoup plus évident et intuitif de comprendre ce qui a été testé, ce qui a échoué et pourquoi :

Sortie du terminal montrant la réussite des tests Jest des validateurs dans app.test.js, notamment ValidateHost.js et ValidateHttps.js.

C’est bien mieux ! ???


Si vous aimez Jest autant que moi (?) , vous pourriez aussi être intéressé par quelques-uns de mes autres articles sur Jest :

Si la sécurité web vous intéresse également, j’aimerais vous retrouver dans la communauté Slack de The Secure Developer, ou sur Twitter si vous préférez.

Publié dans:

Lire la suite

Live Stream

Les agents de remédiation démystifiés : pourquoi corriger vaut mieux que détecter

Découvrez comment l’agent de remédiation de Snyk utilise les renseignements de sécurité, l’analyse de la cassabilité et la validation pour transformer les vulnérabilités en pull requests prêtes à être fusionnées.

feature insights context
Blog

Dans les coulisses de la compromission de keyv sur npm : malware preinstall, provenance fiable et hooks d’IDE

keyv 6.0.0 et dix versions npm associées ont diffusé un malware à l’installation. Découvrez les versions touchées, les empreintes, les étapes de détection et l’ordre de remédiation recommandé.

feature ai ide dark
Blog

Premiers aperçus d’Evo Agentic AppSec : remédiation agentique et défense contre le code malveillant

Découvrez les premières capacités d’Agentic AppSec de Snyk : un agent de remédiation autonome qui corrige les vulnérabilités et une défense contre le code malveillant qui bloque les packages à risque avant leur mise en production.