Tutoriel Jasmine Framework : tests unitaires avec exemple

⚡ Résumé intelligent

Jasmine est axée sur le comportement JavaFramework de test de scripts qui exécute des tests unitaires Node.js sans navigateur ni DOM, utilisant des blocs describe, des spécifications et des comparateurs expect pour vérifier que chaque fonction exportée se comporte comme documenté.

  • (I.e. Rôle du cadre : Jasmine teste tout JavaScript sans navigateur, DOM ni bibliothèques auxiliaires.
  • ☑️ Configuration de l'environnement : Installez le module, exécutez jasmine init, puis examinez spec/support/jasmine.json.
  • ✅ Modèle de spécification : La description nomme une suite, elle définit une spécification, elle s'attend à ce que le résultat soit vérifié.
  • 🧪 Correspondances : Les verbes toBe, toEqual, toContain, toThrow et toHaveBeenCalled couvrent la plupart des assertions.
  • ️ Coureur moderne : Le paquet jasmine maintenu remplace le module jasmine-node non maintenu.
  • (I.e. Choix du cadre de travail : Jasmine gère les assertions et les espions, tandis que Jest ajoute des exécutions parallèles et des instantanés.

Tutoriel sur le framework Jasmine pour les tests unitaires d'applications Node.js

Qu’est-ce que JasmineJS ?

Jasmine est un logiciel open source et le plus populaire JavaCadre de test de bibliothèque de scripts pour tester tout type de JavaApplication de script. Jasmine suit la procédure de développement piloté par le comportement (BDD) pour garantir que chaque ligne de JavaL'instruction de script est correctement testée au niveau unitaire.

À quoi sert le framework Jasmine ?

Les tests sont un élément clé de toute application. Pour les tests unitaires Node.js, le framework disponible est Jasmine. Au début des années 2000, il existait déjà un framework de test. Javascénario applications appelées JsUnit. Later ce framework a été mis à niveau et est maintenant connu sous le nom de Jasmine.

Jasmine aide à l'automatisation Tests unitaires, une pratique devenue essentielle lors du développementping et le déploiement d'applications web modernes.

Dans ce didacticiel Jasmine, vous apprendrez comment configurer votre environnement avec Jasmine et comment exécuter des tests Jasmine pour votre première application Node.js.

Jasmine pour tester les applications Node.js

Jasmine est un Développement axé sur le comportement (BDD) cadre de test pour JavaScript. Il le fait pas s'appuyer sur les navigateurs, le DOM ou tout autre JavaFramework de script. Il est donc adapté aux sites web. Node.js projets, ou n'importe où ailleurs JavaLe script peut être exécuté. Pour commencer à utiliser Jasmine, vous devez d'abord télécharger et installer les modules Jasmine nécessaires.

Comment configurer l'environnement de test Jasmine

Dans la suite de ce tutoriel Jasmine pour Node.js, vous devrez initialiser votre environnement et examiner le fichier de configuration de Jasmine. Les étapes ci-dessous montrent comment configurer Jasmine dans votre environnement.

Étape 1) Installer les modules NPM
Vous devez Installer NPM Le module jasmine permet d'utiliser le framework Jasmine au sein d'une application Node.js. Pour installer le module jasmine-node, exécutez la commande ci-dessous.

npm install jasmine-node

Note de version (2026) : La commande historique ci-dessus fonctionne toujours, mais la nœud de jasmin Ce module est en mode maintenance et intègre Jasmine 1.3 ; ne le conservez donc que pour les projets existants. Les nouvelles installations de Node.js utilisent la version maintenue. Jasmine CLI en tant que dépendance de développement et l'appelle via npx :

npm install --save-dev jasmine
npx jasmine init

Jasmine 6.x est la branche principale actuelle et prend en charge Node.js 20, 22 et 24, et Node.js 24 est la version LTS active en 2026.

Étape 2) Initialiser l'environnement Jasmine
Initialisation du projet – Jasmine crée alors un répertoire « spec » et un fichier de configuration JSON. Le répertoire « spec » sert à stocker tous vos fichiers de test. Ainsi, Jasmine saura où se trouvent vos tests et pourra les exécuter en conséquence. JSON Ce fichier sert à stocker des informations de configuration spécifiques à Jasmine.

Pour initialiser l'environnement Jasmine, exécutez la commande ci-dessous.

jasmine init

Étape 3) Inspectez votre fichier de configuration.
Le fichier de configuration sera stocké dans le dossier spec/support sous le nom de jasmine.json. Ce fichier énumère les fichiers sources et les fichiers de spécifications que vous souhaitez que le programme d'exécution Jasmine inclue.

La capture d'écran ci-dessous montre un exemple typique du fichier jasmine.json pour Jasmine.

Le fichier de configuration Jasmine dans le dossier de support des spécifications indique le répertoire des spécifications et les fichiers spec_files.

  1. Notez que le répertoire spec est spécifié ici. Comme indiqué précédemment, lorsque Jasmine s'exécute, il recherche tous les tests de ce répertoire.
  2. La prochaine chose à noter est le paramètre spec_files – Cela indique que quels que soient les fichiers de test créés, ils doivent être ajoutés au mot-clé « spec ».

Note de configuration : Dans Jasmine 6.x, le même fichier accepte également aides, qui se chargent une fois avant chaque spécification, et un env Le bloc contient des options telles que random et stopSpecOnExpectationFailure. Le glob spec_files par défaut est **/*[sS]spec.?(m)jset un fichier différent peut être transmis avec –config ou la Chemin de configuration de Jasmine variable.

Ensuite, dans ce didacticiel du framework Jasmine, nous apprendrons comment utiliser Jasmine pour tester les applications Node.js.

Comment utiliser Jasmine pour tester les applications Node.js

Afin d'utiliser les tests unitaires Jasmine pour les applications Node.js, une série d'étapes doivent être suivies.

Dans l'exemple ci-dessous, nous allons définir un module qui additionne deux nombres à tester. Nous créerons ensuite un fichier de code distinct contenant le code de test, puis nous utiliserons Jasmine pour tester la fonction Add.

Étape 1) Définissez le code qui doit être testé. Nous allons définir une fonction qui ajoutera 2 nombres et renverra le résultat. Ce code va être écrit dans un fichier appelé « Add.js ».

La capture d'écran ci-dessous montre le module Add.js finalisé, et le même code est répété sous forme de texte en dessous.

Le module Add.js exporte la fonction AddNumber qui renvoie la somme de deux paramètres.

var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};

Code Explication

  1. Le mot-clé « exports » est utilisé pour garantir que la fonctionnalité définie dans ce fichier est effectivement accessible par d'autres fichiers.
  2. Nous définissons ensuite une fonction appelée « AddNumber ». Cette fonction est définie pour prendre 2 paramètres, a et b. La fonction est ajoutée au module « exports » pour faire de la fonction une fonction publique accessible par d'autres modules d'application.
  3. Nous faisons enfin en sorte que notre fonction renvoie la valeur ajoutée des paramètres.

Étape 2) Ensuite, nous devons définir notre code de test Jasmine, qui servira à tester notre fonction « Add » dans le fichier Add.js. Le code ci-dessous doit être placé dans un fichier appelé add-spec.js.

NoteLe mot « spec » doit être ajouté au fichier de test pour qu'il puisse être détecté par Jasmine.

La capture d'écran ci-dessous montre le même fichier de spécifications ouvert dans un éditeur.

Le fichier add-spec.js contient une suite de descriptions et une spécification it affirmant que AddNumber renvoie 11.

var app=require("../Add.js");
describe("Addition",function(){
it("The function should add 2 numbers",function() {
var value=app.AddNumber(5,6);
expect(value).toBe(11);
});
});

Code Explication

  1. Nous devons d'abord inclure notre fichier Add.js afin de pouvoir tester la fonction 'AddNumber' dans ce fichier.
  2. Nous créons maintenant notre module de test. La première partie du module de test consiste à décrire une méthode qui donne essentiellement un nom à notre test. Dans ce cas, le nom de notre test est « Addition ».
  3. Le bit suivant consiste à donner une description de notre test en utilisant la méthode « it ».
  4. Nous appelons maintenant notre méthode AddNumber en lui fournissant deux paramètres : 5 et 6. Ces paramètres seront transmis à la méthode AddNumber du fichier Add.js. La valeur de retour est ensuite stockée dans une variable nommée value.
  5. La dernière étape consiste à effectuer la comparaison, c'est-à-dire notre test proprement dit. Puisque nous nous attendons à ce que la valeur renvoyée par la fonction AddNumber soit 11, nous la définissons à l'aide de la méthode expect(value).toBe(la valeur attendue).

Sortie

  1. Pour exécuter le test, il faut exécuter la commande jasmine.
  2. La capture d'écran ci-dessous montre qu'après l'exécution de la commande Jasmine, celle-ci détecte le test « add-spec.js » et l'exécute. Les erreurs éventuelles sont signalées.

Sortie console de la commande jasmine signalant le test add-spec exécuté

L'exemple Add utilise un seul comparateur, mais Jasmine en fournit un ensemble complet. Le tableau ci-dessous répertorie ceux qui couvrent la quasi-totalité des assertions que vous serez amené à écrire.

Allumettes au jasmin que vous utiliserez le plus

Un matcher est la comparaison qui suit expect(). Chaînez .not avant tout matcher pour l'inverser, comme dans expect(value).not.toBe(11).

matchers Ce qu'il vérifie Utilisation typique
être Identité stricte, la même comparaison que === s'attendre à ce que la valeur soit 11
égaler Égalité profonde des objets et des tableaux s'attend à ce que l'utilisateur soit égal à {id: 1}.
contenir Appartenance à un tableau ou à une chaîne de caractères s'attend à ce que les fichiers contiennent « add-spec.js ».
à définir La valeur n'est pas indéfinie s'attend à ce que (app.AddNumber).soBeDefined()
lancer La fonction encapsulée génère une erreur s'attendre à ce que (callAdd).toThrow()
avoir été appelé Un espion a été invoqué au moins une fois. s'attendre à ce que (logger.write).toHaveBeenCalled()

Deux habitudes permettent de rendre les erreurs plus lisibles. Utilisez `toBe` uniquement pour les types primitifs et les références identiques, car deux objets ayant le même contenu ne sont jamais `===`. Utilisez `toEqual` pour les structures et ajoutez `toHaveBeenCalledWith` lorsque les arguments sont aussi importants que l'appel lui-même.

Installation, démontage et espionnage dans Jasmine

Les suites logicielles complètes nécessitent un état partagé et des doublons pour les collaborateurs lents. Jasmine fournit les deux sans aucun module supplémentaire.

  • avant et après chaque Exécutez ces instructions avant et après chaque spécification à l'intérieur d'un bloc describe, qui est l'endroit naturel pour reconstruire les fixtures.
  • avant et après tout Ces opérations ne s'exécutent qu'une seule fois pour l'ensemble du bloc ; il est donc conseillé de les réserver aux tâches coûteuses telles que l'ouverture d'une connexion.
  • espionner(objet, 'méthode') remplace une méthode réelle par une tracroi double ; ajoutez .and.returnValue() pour contrôler sa réponse.
  • jasmine.createSpy('nom') construit un objet double autonome pour un rappel qui n'a aucun objet auquel se rattacher.
  • Spécifications asynchrones peut être déclarée asynchrone et attendue, peut renvoyer une promesse, ou peut accepter une fonction de rappel « done » qui doit être appelée exactement une fois.

Les espions se réinitialisent entre les tests, de sorte qu'une suite de tests ne divulgue jamais une méthode simulée au test suivant. Cette isolation permet à un test défaillant de pointer vers un seul défaut plutôt que vers une chaîne de défauts, ce qui correspond à la même discipline décrite dans le tests unitaires fondamentaux.

Jasmine contre Mocha contre Jest

Jasmine est l'un des trois frameworks qui dominent JavaLes tests de script, et le choix se résume généralement à la quantité de câblage que vous souhaitez gérer.

Aspect Jasmin Mocha il y a
Affirmations Construit en Ajouté, généralement Chai Construit en
Espions et moqueries Construit en Ajouté, généralement Sinon Construit en
De bout en bout Port série Port série Parallèlement aux processus
Instantanés Non Non Oui
Maison commune Angular, Node.js pur Piles Node.js flexibles React et les outils de regroupement modernes

Choisissez Mocha lorsque vous souhaitez assembler votre propre pile d'assertions et de simulations, et il y a Lors d'exécutions parallèles, la couverture et les instantanés sont plus importants que le contrôle de la configuration. Jasmine reste l'option la plus légère et complète, ce qui explique sa popularité. tests d'automatisation suites

FAQ

Jasmine interprète `spec_dir` comme un préfixe, puis chaque motif glob listé dans `spec_files`, de sorte que seuls les fichiers correspondants sont exécutés. Les chemins commençant par un point d'exclamation sont exclus, et les fonctions d'assistance sont chargées une fois avant les tests pour enregistrer la configuration partagée.

Déclarez la spécification asynchrone et attendez l'appel, renvoyez une promesse ou acceptez un rappel de fin. guide asynchrone avertit que la fonction done doit être exécutée exactement une fois, sinon les échecs se produisent sur la mauvaise spécification.

Indiquez un chemin ou une expression régulière après l'exécuteur, par exemple : `npx jasmine spec/appSpec.js`. L'option `--filter` accepte un modèle correspondant au nom décrit, ce qui permet d'obtenir rapidement des retours d'information pendant que vous travaillez sur une seule suite de tests.

Le nœud de jasmin Le paquet est en mode maintenance, inclut toujours Jasmine 1.3 et indique Node.js 10 et 12 comme versions actuelles. Le paquet Jasmine officiel tracks le framework et prenait en charge les versions de Node.js à la place.

Ajoutez un x en préfixe à une spécification, comme dans xit ou xdescribe, et Jasmine la signale comme étant en attente. Ajoutez un f en préfixe, comme dans fit ou fdescribe, et seules les spécifications ciblées seront exécutées. Supprimez les deux préfixes avant de valider.

Les assistants IA génèrent en quelques secondes des descriptions de blocs, de comparateurs et de cas limites à partir d'un module existant, et signalent les suites présentant des défaillances intermittentes. Chaque spécification générée doit néanmoins être vérifiée, car une affirmation catégorique concernant un comportement anormal peut masquer le défaut.

Copilote GitHub Il complète les corps des spécifications au fur et à mesure de votre saisie et son mode agent permet d'ouvrir une demande de fusion pour corriger les spécifications défectueuses après une refactorisation. Considérez le diff comme une proposition et exécutez vous-même la suite de tests.

Angular soutient toujours les spécifications de Jasmine, et Rapporteur d'angle Jasmine était utilisé comme framework par défaut avant son archivage. Les équipes associent désormais Jasmine à Karma pour les navigateurs, ou migrent les flux de navigateur vers Cypress et dramaturge.

Résumez cet article avec :