BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités Facebook publie Jest, sa bibliothèque de Tests Unitaires JavaScript proposant des mocks automatiques

Facebook publie Jest, sa bibliothèque de Tests Unitaires JavaScript proposant des mocks automatiques

Facebook vient de publier Jest, un outil open source de tests unitaires JavaScript basé sur Jasmine.

Initialement, Jest a été créé par Facebook il y a deux ans pour pouvoir écrire des tests rapides et fiables pour leur chat web. Le projet gagnant en popularité en interne, un ingénieur logiciel chez Facebook s'en est saisi pour en améliorer les performances et le rendre open source.

De manière simple, Jest est conçu pour rendre le développement de tests Javascript idiomatiques, rapide et simple. Jest bouchonne automatiquement les modules CommonJS retournés par require() ; on trouve également le support pour les API DOM dans les environnements de tests, des configurations par défaut intelligentes, pré-analyse du code et exécution des tests en parallèle par défaut. En parallélisant les tests, Jest termine l'exécution plus rapidement.

Morrison dit :

Le but de Jest est de réduire le temps passé et l'effort intellectuel nécessaire pour commencer à tester un projet - et donc, il met à disposition l'essentiel : un CLI rapide, un ensemble d'utilitaire pour les bouchons et un système de bouchons automatiques.

De plus, si vous cherchez des outils d'isolation comme des bibliothèques de bouchons, avec la plupart des autres outils vous serez encore obligés d'écrire pas mal de code répétitif dans vos tests (voire dans votre code à tester).

Nous l'avons constaté par nous-mêmes chez Facebook, à quel point il est important de passer plus de temps à écrire son application (au lieu de passer du temps à préparer votre environnement) - et c'est donc sur ça que se concentre Jest.

La grosse différence entre Jest et Jasmine se situe dans le fait que Jest ajoute plusieurs couches au dessus de Jasmine. Le plus important est son système de bouchons automatiques lors de l'exécution des tests. Jest crée automatiquement des bouchons pour chacune des dépendances d'un module et les met à disposition par défaut - cela rend alors facile l'isolation d'un module par rapport à ses dépendances. Morrison explique que l'isolation est l'option par défaut pour les nouveaux tests et que les développeurs auront un contrôle total sur le degré d'isolation qu'ils souhaitent. Chaque test indique quels modules devraient être bouchonnés ou non.

La documentation de Facebook explique en détail ce système de bouchonnage automatique :

En fait, Jest implémente sa propre version de require() dans l'environnement de tests. Cette fonction charge le vrai module et l'inspecte pour créer la version bouchonnée qu'il retourne ensuite.

Cela signifie que Jest vous retourne un objet semblable à votre vrai module mais avec des bouchons pour chacune des valeurs exportées.

Bien que Jest mette à disposition un bouchonnage automatique, il est important de noter qu'il est également possible pour les développeurs d'avoir le contrôle sur ce qui sera ou ne sera pas bouchonné via jest.mock() et jest.dontMock().

Les réactions de la communauté étaient majoritairement positives. Sur Hacker News, l'utilisateur Cthulu s'exprime ainsi :

Une bibliothèque intéressante : notre ensemble de tests de notre projet AngularJS ralentit peu à peu, d'abord car il y a de plus en plus de tests mais aussi pour d'autres raisons :

  • Aucune parallélisation, même si les tests sont totalement indépendants

  • Les tests DOM entrainent de nombreuses pauses de GC

  • (Probablement) le temps de démarrage et d'initialisation de PhantomJS (non mesuré) Une optimisation simple mais un peu bancale a été de séparer ma suite de tests dans 2 terminaux différents (en développement, pour les tests en continu).

Ciblant directement l'injection de dépendance et AngularJS, Facebook explique que "Jest accompli le même résultat mais avec une approche différente". Avec Angular, on injecte les dépendances en les passant en arguments, ce qui rend l'étape de tests facile. Par contre, Facebook remarque que pour avoir une fonction testable en Angular, les développeurs doivent suivre le modèle spécifique d'Angular et utiliser son framework d'injection de dépendances. Jest aborde le problème différemment :

Jest permet de bouchonner les dépendances comme Angular, mais au lieu de créer son propre chargeur de module, il utilise CommonJS. Cela vous permet de tester n'importe quel code existant qui utilise déjà CommonJS sans avoir besoin de beaucoup refactorer pour le rendre compatible avec un autre système de chargement de module.

L'utilisateur Caiob est en accord avec le ressenti positif autour de Jest et est un adepte de l'approche par injection de dépendance. Selon lui : "C'est génial que Facebook se penche sur l'amélioration d'un outil existant et familier comme Jasmine. J'apprécie également la façon dont ils gèrent les modules CommonJS".

Morrison explique que Facebook souhaite lancer une tendance pour faciliter les tests et aider les développeurs à passer plus de temps à développer leurs applications. Les lecteurs d'InfoQ qui voudraient contribuer au projet peuvent accéder au dépôt Github et envoyer une pull request ou rejoindre le canal #jestjs sur freenode.

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT