Aller au contenu principal

Jest 23 : 🔥 Des tests ultra-rapides et agréables

· 8 min de lecture
Ricky Hanlon
Ricky Hanlon
Traduction BĂŞta Non Officielle

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 →

Aujourd'hui, nous sommes ravis d'annoncer Jest 23, notre version majeure la plus importante à ce jour ! Avec plus de 100 contributeurs, nous avons livré une multitude de fonctionnalités et de corrections de bugs. Merci à toute la communauté d'avoir contribué à rendre les tests JavaScript agréables.

Nous souhaitons également souhaiter la bienvenue à Babel et webpack dans la communauté Jest ! Après leur migration de Mocha vers Jest 23 Beta, webpack a vu le temps total de sa suite de tests réduit par 6, passant de plus de 13 minutes à 2 minutes 20 secondes. #blazingmeansgood

Voici quelques points forts et changements cassants de Jest 23.

Pour une liste complète, consultez le changelog.

Mode interactif des instantanés​

Nous avons ajouté une nouvelle option par défaut dans le menu de surveillance : le mode interactif des instantanés. Ce nouveau mode vous permet de parcourir chaque instantané en échec dans chaque suite défaillante, d'examiner vos instantanés échoués et de choisir individuellement de les mettre à jour ou de les ignorer.

Mode interactif des instantanés en action

Consultez la documentation du mode interactif des instantanés ici.

Comparateurs de propriétés pour les instantanés​

Souvent, les objets que vous capturez en instantané contiennent des valeurs générées comme des dates et des identifiants. Jest vous permet désormais de passer des propriétés au comparateur d'instantané qui spécifient la structure des données plutôt que les valeurs exactes. Ces comparateurs de propriétés sont vérifiés avant la sérialisation du type de comparateur (au lieu de la valeur), garantissant des résultats d'instantané cohérents entre les exécutions de tests.

Comparateurs de propriétés pour les instantanés

Voir la documentation mise à jour de toMatchSnapshot ici ou le guide sur les comparateurs de propriétés pour plus d'informations.

Comparateurs asynchrones personnalisés​

Nous prenons désormais en charge les comparateurs asynchrones avec expect.extends ! Les comparateurs asynchrones renvoient une promesse (Promise) afin que vous puissiez utiliser await pour attendre leur résolution. Par exemple :

Comparateurs asynchrones personnalisés en action

Documentation disponible ici.

Comparateurs asymétriques personnalisés​

Les comparateurs asymétriques sont idéaux lorsque vous ne vous intéressez qu'à l'égalité asymétrique. Par exemple, quand le côté gauche doit être un objet contenant un sous-ensemble des propriétés du côté droit, plutôt qu'une correspondance exacte. Jest fournit plusieurs comparateurs asymétriques prêts à l'emploi, et dans cette version, nous introduisons les comparateurs asymétriques personnalisés.

Comparateurs asymétriques personnalisés en action

Jest Each​

@mattphillipsio a fait don du package jest-each au cœur de Jest (merci Matt !). jest-each est une bibliothèque inspirée de mocha-each et des Tableaux de données Spock qui permet de définir un tableau de cas de test, puis d'exécuter un test pour chaque ligne avec les valeurs de colonne spécifiées. Nous prenons en charge à la fois les types de tableaux et les littéraux de modèle pour toutes les variantes de describe et test. La documentation est disponible ici, et pour ceux qui n'utilisent pas encore Jest 23, nous publions toujours jest-each séparément !

jest-each en action

Un immense merci à Prettier pour avoir corrigé si rapidement le formatage des tableaux (voir Prettier 1.13) !

Nouveaux matchers​

Nous n'ajoutons des matchers au cœur de Jest que s'ils sont utiles à une grande partie de la communauté, laissant la majorité des matchers à l'écosystème (voir jest-extended). Certains matchers méritent d'être intégrés, et Jest 23 ajoute :

  • nthCalledWith

  • toReturn

  • toReturnTimes

  • toReturnWith

  • lastReturnedWith

  • nthReturnedWith

  • toStrictEqual

Nouveaux matchers en action

Consultez la documentation mise Ă  jour des assertions expect ici.

Déboguer les tests qui ne se terminent pas​

Un problème fréquent sur notre issue tracker concerne Jest qui "se bloque" après une exécution de tests. Cela provient généralement de handles ouverts par le code applicatif, empêchant Jest de s'arrêter. Jusqu'ici, les utilisateurs utilisaient --forceExit comme solution (non recommandée).

Pour faciliter le débogage, nous détectons désormais quand Jest ne s'arrête pas :

Détection des tests bloqués

Et nous proposons un nouveau flag --detectOpenHandles pour identifier les handles ouverts :

Exécution de detectOpenHandles

Consultez la documentation mise Ă  jour de l'interface CLI ici.

Plugins pour le mode Watch​

Nous avons entièrement repensé le système du mode Watch pour permettre l'ajout de plugins personnalisés. Les Watch Mode Plugins permettent désormais d'intercepter les événements Jest et d'ajouter des options personnalisées dans le menu du mode Watch. Toutes les options par défaut sont implémentées via ce système, et la documentation pour créer les vôtres est disponible ici.

Grâce à ce changement, nous réintroduisons également la saisie semi-automatique via le plugin jest-watch-typeahead !

Plugin de saisie semi-automatique en action

Consultez jest-watch-typeahead pour la documentation et les instructions d'installation. Un immense merci à @rogeliog pour le nouveau système de plugins et le plugin jest-watch-typeahead !

Changements cassants​

Comme à chaque version majeure, nous introduisons quelques changements cassants pour permettre des évolutions futures et améliorer l'expérience des tests. Voici les principaux changements :

  • Description et fonction obligatoires pour les tests : Les tests sans description ET fonction Ă©chouent dĂ©sormais.

  • Suppression des props non dĂ©finies dans les snapshots React : Snapshots plus petits et comportement React correct.

  • Suppression des API dĂ©prĂ©ciĂ©es : mapCoverage est supprimĂ© car devenu inutile. jest.genMockFunction et jest.genMockFn sont supprimĂ©s au profit de jest.fn.

  • Ajout des noms de snapshot dans les Ă©checs : Le nom du snapshot (si fourni) apparaĂ®t dĂ©sormais dans les messages d'Ă©chec pour faciliter l'identification.

  • Remplacer les horodatages fictifs : Nous avons remplacĂ© les horodatages fictifs par invocationCallOrder car deux mocks ou plus peuvent souvent avoir le mĂŞme horodatage, rendant impossible le test de l'ordre d'appel.

  • Ajouter les rĂ©sultats aux snapshots de mocks : Nous avons ajoutĂ© les rĂ©sultats d'appel des fonctions mockĂ©es aux snapshots afin de tracer Ă  la fois les appels et les rĂ©sultats des invocations.

Autres améliorations​

  • Couverture en mode watch : La couverture est dĂ©sormais limitĂ©e uniquement aux fichiers testĂ©s en mode watch ou lors de l'utilisation de --onlyChanged et --findRelatedTests.

  • Documentation des versions : Nous avons ajoutĂ© la documentation pour chaque version mineure depuis Jest 22, et supprimĂ© toutes les mentions "Requiert Jest X.X+" dans la doc.

  • Meilleurs rĂ©sumĂ©s de snapshots : Nous avons revu l'affichage du RĂ©sumĂ© des Snapshots pour rendre les snapshots obsolètes plus informatifs.

  • Meilleures traces de pile : Nous avons ajoutĂ© des traces de pile aux erreurs asynchrones, erreurs de timeout, expect.assertions, et exceptions non-erreurs. Nous indiquons Ă©galement la colonne dans le cadre de code !

  • Meilleure prise en charge de React 16 : Ajoute la prise en charge des snapshots pour React.Fragment, React.forwardRef et React.createContext.

  • Suivi des valeurs de retour et d'erreur des mocks : Ajoute mock.results contenant la valeur de retour ou l'erreur levĂ©e pour chaque appel mockĂ©.

  • Blazing 🔥 : Nous avons ajoutĂ© un badge "blazing" au README pour indiquer que Jest est incroyablement bon.

Jest Summit​

La semaine dernière, l'équipe principale de Jest s'est réunie pour le Jest Summit chez Facebook à Londres où nous avons travaillé et publié Jest 23, annoncé le Jest Open Collective, et donné plusieurs conférences :

L'intégralité des talks est disponible ici.

La participation était incroyable, et nous avons pu rencontrer en personne une grande partie de la communauté londonienne. Merci à tous ceux qui nous ont rejoints et pour votre soutien continu ! Restez à l'écoute pour notre prochain article qui présentera le Jest Open Collective et nos projets futurs.

Comme toujours, cette version n'aurait pas été possible sans vous, la communauté JavaScript. Nous sommes extrêmement reconnaissants d'avoir l'opportunité d'améliorer ensemble les tests JavaScript. Si vous souhaitez contribuer à Jest, n'hésitez pas à nous contacter sur GitHub ou sur Discord.