Jest 16.0 : CLI suralimentée et nouvelles de la communauté
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Un mois s'est écoulé depuis la dernière version majeure, et nous avons apporté des améliorations significatives à Jest. Dans cette version majeure, nous mettons à jour le format des snapshots, ce qui nécessitera probablement leur mise à jour lors de la mise à niveau de Jest. Nous ne prenons pas ces changements à la légère et ne nous attendons pas à ce que cela se produise souvent, mais nous pensons nécessaire d'améliorer le format de temps en temps.
CLI améliorée

Jest 16 propose une nouvelle interface de rapport qui affiche les tests en cours d'exécution ainsi qu'un résumé en direct et une barre de progression basée sur le temps d'exécution estimé des tests précédents. Nous avons également amélioré la sortie CLI pour une meilleure compatibilité avec différents schémas de couleurs. Si des tests avaient échoué lors d'une exécution précédente, Jest les exécutera désormais en premier pour fournir rapidement des informations utiles aux utilisateurs.
Nous avons aussi ajouté de nombreuses fonctionnalités qui pourront vous être utiles :
-
Nouveaux flags CLI : Une option
--testNamePattern=patternou-t <pattern>a été ajoutée pour filtrer les tests depuis la ligne de commande, similairement àit.onlyoufitdans les tests. -
Les tests ayant échoué précédemment s'exécutent désormais toujours en premier.
-
jest <pattern>est désormais insensible à la casse pour faciliter le filtrage des fichiers de test. -
Une exécution de test en mode watch peut maintenant être interrompue. Pendant un test, appuyez simplement sur l'une des touches utilisées en mode watch (
a,o,p,qouenter) pour abandonner l'exécution et en démarrer une nouvelle. -
Le flag
--bailfonctionne désormais aussi en mode watch. Combiné à l'exécution prioritaire des tests en échec, le mode watch de Jest devient suralimenté ! -
Jest prend désormais automatiquement en compte les fichiers et tests avec l'extension
jsx. -
Jest avertit des fichiers de mocks manuels en double et nous avons amélioré les mocks automatiques pour les modules ES compilés avec babel.
-
Une fonction
jest.clearAllMocksa été ajoutée pour réinitialiser tous les mocks entre les tests. -
Nous avons amélioré la résolution des modules lors de l'utilisation de
moduleNameMapper. -
Enfin, une option CLI
--findRelatedTests <fileA> <fileB>a été ajoutée pour exécuter les tests liés aux fichiers spécifiés. C'est particulièrement utile comme hook pre-commit si vous souhaitez exécuter les tests uniquement sur un ensemble spécifique de fichiers associés à des tests.
Voici à quoi ressemble Jest lorsqu'une exécution de test est interrompue en mode watch : 
Mises à jour des Snapshots
L'implémentation des snapshots dans Jest a été entièrement réécrite. La nouvelle version du package jest-snapshot est désormais structurée pour faciliter son intégration dans d'autres runners de tests et permettre des intégrations plus poussées comme avec React Storybook. Jest ne marque pas les snapshots comme obsolètes dans un fichier contenant des tests ignorés ou en échec. Nous avons également apporté plusieurs modifications au format des snapshots :
-
Les objets et tableaux sont désormais imprimés avec une virgule finale pour minimiser les futurs changements dans les snapshots.
-
Nous avons supprimé les noms de fonctions des snapshots. Ils causaient des problèmes avec différentes versions de Node, avec l'instrumentation de couverture de code, et nous estimions généralement que montrer à l'utilisateur qu'un nom de fonction a changé n'apportait pas d'information utile.
-
Les snapshots sont désormais triés selon l'ordre naturel dans un fichier.
Lors de la mise à niveau vers Jest 16, le diff pourrait ressembler à ceci : 
Mises à jour de la bibliothèque de tests
Nous avons finalisé la migration des assertions Jasmine vers les nouveaux matchers Jest. Trois nouveaux matchers ont été ajoutés : toBeInstanceOf, toContainEqual et toThrowErrorMatchingSnapshot. Les messages d'erreur des matchers espions/mocks (toHaveBeenLastCalledWith, toHaveBeenCalledWith, lastCalledWith et toBeCalledWith) sont désormais plus lisibles. Après avoir réécrit toutes les assertions et les avoir séparées dans leur propre package, nous travaillerons à les rendre autonomes pour qu'elles puissent être intégrées à n'importe quel framework de test.
Nous avons également ajouté plusieurs alias demandés par la communauté. Pour concentrer Jest sur un seul test, vous pouvez désormais utiliser it.only, test.only ou continuer avec fit ; pour ignorer un test, it.skip ou test.skip sont disponibles en plus de xit ; enfin pour définir un test comme concurrent, vous pouvez utiliser test.concurrent, particulièrement utile si votre test accède à des ressources réseau ou des bases de données.
Enfin, si vous souhaitez remplacer le global expect par une bibliothèque d'assertions différente comme chai, cela peut maintenant être configuré via l'option setupTestFrameworkScriptFile.
Actualité de la communauté
Ce mois-ci, de nombreux articles ont été publiés sur la fonctionnalité de snapshot testing de Jest, comment migrer vers Jest et comment commencer à écrire des tests. J'ai également réalisé plusieurs vidéos en direct pour expliquer le fonctionnement de Jest et du snapshot testing :
Plusieurs personnes ont écrit des articles sur le snapshot testing. L'article le plus percutant pour l'équipe Jest fut "Testing with Jest Snapshots: First Impressions". Ben soulève trois points essentiels :
-
Les tests par snapshot complètent les tests conventionnels, ils ne les remplacent pas.
-
Les tests par snapshot sont plus efficaces avec un processus de code review rigoureux.
-
Les tests par snapshot fonctionnent bien avec l'auto-mocking.
Nous vous recommandons vivement de lire l'article complet. Ben a parfaitement expliqué les raisons qui ont motivé le développement du snapshot testing. Il est important de préciser que nous ne l'avons pas conçu pour remplacer toutes les autres formes de tests, mais plutôt comme un moyen permettant aux développeurs de tester du code qu'ils n'auraient autrement pas testé. Cette technique fonctionne bien pour les composants React, les sorties CLI, les messages d'erreur et bien d'autres cas, mais elle ne résout pas tous les problèmes. L'objectif de Jest est d'offrir plusieurs méthodes pour écrire des tests efficaces sans compromettre les performances ou la maintenabilité du projet.
Autres articles marquants sur le snapshot testing :
-
Une série sur les tests React Native : Partie 1 : Jest – Les snapshots entrent en jeu et Partie 2 : Jest – Snapshots Redux pour vos Actions et Reducers.
-
Comment nous avons adopté le snapshot testing de Jest pour JavaScript.
-
Si vous utilisez la bibliothèque de tests populaire enzyme, le projet enzyme-to-json permet désormais d'utiliser les snapshots de Jest avec enzyme.
Redux utilise maintenant Jest et Max Stoiber a rédigé un tutoriel sur le test de code Redux. Un excellent guide pour tester MobX est également disponible. Pour les utilisateurs de create-react-app, Jest est maintenant inclus par défaut. Kent C. Dodds propose de nombreuses vidéos sur egghead.io pour bien démarrer avec Jest.
Pour les autres runners de tests, Kenneth Skovhus a créé une super bibliothèque jest-codemods qui automatise la migration. Les codemods sont géniaux : ils vous permettent d'évaluer rapidement si Jest répond à vos besoins. Essayez-les !
Le changelog complet est disponible sur GitHub. Jest 16 est le fruit d'un effort communautaire avec désormais plus de 220 contributeurs. Nous remercions chacun d'entre vous pour votre aide à faire de ce projet une réussite.
