Maison >interface Web >js tutoriel >Comment utiliser Node.js Test Runner : un guide détaillé
L'exécuteur de test JavaScript ou Node.js permet d'automatiser le processus de test des sites Web et des applications Web en activant une gamme de techniques de test, notamment les tests unitaires, d'intégration et de bout en bout.
Le programme d'exécution de tests Node.js automatise l'exécution des tests et offre des commentaires sur les résultats pour aider à identifier et à résoudre efficacement les bogues pendant les étapes de développement logiciel.
Dans ce blog, nous examinons comment tirer parti du lanceur de tests Node.js pour les tests automatisés tout en explorant des méthodes telles que les tests moqueurs et parallèles ainsi que les hooks de test.
Les langages de programmation comme Python, Ruby et Go avaient un exécuteur de test intégré, mais JavaScript n'en avait pas. Tous les testeurs de l'écosystème JavaScript, tels que Mocha, Jest et Jasmine, ont été créés en tant que packages tiers.
Tout cela a changé lorsque Node.js a publié un exécuteur de test intégré expérimental dans la version 18 de Node.js et a rendu l'exécuteur de test stable dans la version 20 de Node.js.
Le testeur propose plusieurs fonctionnalités, telles que :
Bibliothèque d'assertions
Test des crochets
Fonctionnalité de moquerie
Couverture du code
Rapporteurs de tests
Tests asynchrones
Le programme d'exécution de tests natif de Node.js offre plusieurs avantages pour les tests d'automatisation JavaScript. Vous trouverez ci-dessous quelques-uns des avantages de l'utilisation de ce programme d'exécution de tests :
Le testeur rationalise le processus de test pour les développeurs et les testeurs en gagnant du temps dans le choix de l'outil à utiliser, car il est intégré à Node.js lui-même.
La bibliothèque d'assertions intégrée dans l'exécuteur de test Node.js simplifie le processus d'écriture de tests et d'obtention des résultats des tests sans qu'il soit nécessaire d'installer d'autres bibliothèques d'assertions.
Le programme d'exécution de tests comprend une fonctionnalité de couverture du code pour garantir que toutes les sections du code sont testées en identifiant les parties qui n'ont pas encore été testées.
Le programme d'exécution de test natif dispose d'une fonctionnalité appelée mode surveillance qui lui permet de surveiller les modifications dans les fichiers de test et leurs dépendances. Si des changements sont détectés, le lanceur de tests réexécutera automatiquement les tests concernés par la modification.
Les tests à l'aide de Node.js permettent d'utiliser des simulations, des stubs et des espions qui sont importants pour tester des composants individuels indépendamment de l'ensemble du logiciel.
Dans cette partie de l'article de blog, vous apprendrez comment commencer à utiliser l'exécuteur de test intégré de Node.js et exécuter votre script de test avec succès.
Pour commencer, suivez ces instructions ;
Assurez-vous d'utiliser Node.js version 20 ou supérieure car le lanceur de tests a été complètement intégré au cœur de Node.js depuis la sortie de la version 20.
Créez un répertoire TestRunner et lancez-le à l'aide de votre environnement de développement intégré (IDE). Par exemple, dans ce scénario, nous avons utilisé VS Code.
Exécutez la commande suivante dans le terminal pour configurer un projet Node.js :
npm init -y
Créez deux nouveaux dossiers nommés src et tests dans le répertoire TestRunner.
Mettez à jour le script de test dans votre fichier package.json avec l'extrait de code suivant :
"scripts": { "test": "node --test TestRunner/tests/" },
Installez Selenium WebDriver en exécutant la commande ci-dessous :
npm install selenium-webdriver
`
Exécutez la commande ci-dessous pour installer ChromeDriver :
npm installer chromedriver
Créez un nouveau fichier startup.test.js dans le dossier tests. Ensuite, ajoutez le code suivant au fichier :
`
const { Constructeur, Par, Clé, jusqu'à } = require("selenium-webdriver");
const assert = require("assert").strict;
const { test } = require("node:test");
{ let driver; test("Setup WebDriver for Google Search Test Suite", async (t) => { driver = await new Builder().forBrowser("chrome").build(); }); test("Navigate to Google and verify title", async (t) => { await driver.get("http://www.google.com"); const title = await driver.getTitle(); assert.strictEqual(title, "Google"); }); test("Cleanup after Google Search Test Suite", async (t) => { await driver.quit(); }); }
`
Le code ci-dessus importe les fonctions requises de node:test et node:assert et décrit un test simple qui accède à Google et vérifie le titre.
Exécutez la commande ci-dessous pour exécuter le test :
tests de nœuds/started.test.js
Dans le lanceur de test Node.js, vous pouvez utiliser les blocs describe() et it() pour exécuter des tests. Le bloc describe() est utilisé pour déclarer une suite qui organise et regroupe les tests associés, tandis que le bloc it() est utilisé pour déclarer un test.
L'avantage d'utiliser les blocs describe()/it() est qu'il fournit un moyen d'organiser vos tests en blocs de fonctionnalités ou de fonctionnalités associées. Ceci est utile pour les suites de tests plus volumineuses, où vous souhaitez garder les tests bien organisés et regroupés logiquement.
À l'intérieur d'un bloc describe(), vous pouvez avoir plusieurs blocs test() ou it() qui définissent des cas de test spécifiques. Vous pouvez également imbriquer les blocs describe() les uns dans les autres pour créer des sous-groupes de tests pour une organisation plus détaillée.
Vous pouvez écrire des tests en utilisant les blocs describe() et it(), comme indiqué ci-dessous.
Créez un fichier décrivantit.test.js dans le répertoire tests et insérez l'extrait de code fourni ci-dessous :
`
décrire("Test de saisie de formulaire", async() => {
laisser le chauffeur ;
await it("Setup WebDriver", async () => { driver = await new Builder().forBrowser("chrome").build(); }); await it("should input values in a form and check their sum", async () => { await driver.get("https://www.lambdatest.com/selenium-playground/simple-form-demo"); await driver.findElement(By.id("sum1")).sendKeys(2); await driver.findElement(By.id("sum2")).sendKeys(3); await driver.findElement(By.xpath("//button[normalize-space()='Get Sum']")).click(); let sum = await driver.wait(until.elementLocated(By.id("addmessage")),10000); let sumNo = await sum.getText(); assert.strictEqual(sumNo, "5"); }); await it("Cleanup: Close the browser", async () => { await driver.quit(); }); });
`
Exécutez la commande ci-dessous pour exécuter le test :
tests de nœuds/describeit.test.js
Le lanceur de tests Node.js vous permet également de sauter des tests. Vous pouvez ignorer les tests s'ils sont instables, si la fonctionnalité testée est en cours de développement actif, si le test dépend de dépendances externes indisponibles ou si les tests portent sur des fonctionnalités obsolètes.
Les tests individuels peuvent être ignorés en passant l'option skip au test ou en appelant l'annotation skip() du contexte de test. Les annotations permettant d'éviter d'exécuter le test dans le programme d'exécution de test intégré sont constituées d'indicateurs, tels que skip:true, skip;'Ce test est ignoré', t.skip( ), et t.skip(“Ce test est ignoré”) comme illustré dans cet exemple.
`
décrire("Les valeurs attendues doivent être strictement égales", async () => {
laisser le chauffeur ;
driver = wait new Builder().forBrowser("chrome").build();
it("doit être strictement égal", async () => {
wait driver.get("http://www.google.com");
const title = attendre driver.getTitle();
assert.strictEqual(title, "Google");
});
npm init -y
`
tests de nœuds/skipping.test.js
Le lanceur de tests Node.js fournit différents hooks de test. Les hooks sont des fonctions qui s’exécutent immédiatement avant ou immédiatement après un test. Les hooks disponibles dans le lanceur de test Node.js sont before(), beforeEach(), after() et afterEach().
Voici quelques exemples d'utilisation de ces crochets :
**avant() *Hook*
Le hook before() est utilisé pour préparer l'environnement de test où il s'exécute une fois avant tous les tests dans un bloc describe. Par exemple, vous pouvez utiliser le hook before() pour configurer WebDriver avant que tous vos tests ne soient exécutés.
Voici comment utiliser le hook before() :
`
décrire("Test de titre de démonstration de formulaire simple", async () => {
laisser le chauffeur ;
"scripts": { "test": "node --test TestRunner/tests/" },
`
tests de nœuds/beforehook.test.js
**beforeEach() *Hook*
Le hook beforeEach() s'exécute une fois avant chaque test, où il est utilisé pour isoler les tests afin qu'ils ne s'affectent pas les uns les autres. Par exemple, si vous devez visiter l'URL d'une page spécifique pour quelques tests, vous pouvez utiliser un hook beforeEach() pour ouvrir la page URL avant l'exécution de chaque test.
Voici comment utiliser le hook beforeEach() :
`
décrire("Test de démonstration de formulaire simple", async () => {
laisser le chauffeur ;
npm install selenium-webdriver
`
tests de nœuds/beforeEachhook.test.js
**après() *Crochet*
Le hook after() s'exécute une fois après l'exécution de tous les tests où il est utilisé pour effectuer des actions de nettoyage une fois tous les tests exécutés. Par exemple, si vous souhaitez fermer WebDriver une fois les tests exécutés, vous pouvez utiliser le hook after().
Voici comment utiliser le hook after() :
`
décrire("Test de démonstration de formulaire simple", async () => {
laisser le chauffeur ;
npm init -y
`
tests de nœuds/afterhook.test.js
**afterEach() *Hook*
Le hook afterEach() est exécuté une fois après chaque test. Il est utilisé pour effectuer des actions de nettoyage après chaque test. Par exemple, si vous souhaitez effacer les cookies après chaque test, vous pouvez utiliser un hook afterEach().
Créez un fichier afterEachhook.test.js dans le répertoire tests et insérez l'extrait de code fourni ci-dessous :
`
const { Constructeur, Par, Clé, jusqu'à } = require("selenium-webdriver");
const assert = require("assert").strict;
const {
décrire,
ça,
avant,
avantChacun,
après,
aprèsChaque,
} = require("noeud:test");
"scripts": { "test": "node --test TestRunner/tests/" },
`
Exécutez la commande ci-dessous pour exécuter le test :
tests de nœuds/afterEachhook.test.js
La fonctionnalité de simulation intégrée du lanceur de tests Node.js vous permet de simuler et de remplacer des fonctions lors de situations de test dans lesquelles des dépendances externes ou des packages tiers sont utilisés. C'est particulièrement pratique lorsque ces dépendances sont encore en phase de développement.
Vous pouvez utiliser la fonctionnalité moqueuse pour créer des espions et des talons. Vous trouverez ci-dessous un exemple illustrant l'utilisation de fonctionnalités de simulation pour valider la récupération de données à partir d'une API :
Tout d'abord, installez axios, un client HTTP basé sur des promesses pour le navigateur et Node.js, à l'aide de la commande ci-dessous :
npm installer axios
Ensuite, créez un fichier index.js et ajoutez le code suivant :
`
const axios = require("axios");
npm install selenium-webdriver
`
Le code ci-dessus implémente une classe MakeRequest, qui a trois fonctions fetchDataFromAPI(), slugifyTitle() et addToDB().
Ensuite, créez un fichier mock.test.js et ajoutez le code suivant :
`
// Décrire les tests liés au mocking
décrire("Tests moqueurs", async() => {
// Réinitialisation des mocks avant chaque test
beforeEach(() => mock.restoreAll());
{ let driver; test("Setup WebDriver for Google Search Test Suite", async (t) => { driver = await new Builder().forBrowser("chrome").build(); }); test("Navigate to Google and verify title", async (t) => { await driver.get("http://www.google.com"); const title = await driver.getTitle(); assert.strictEqual(title, "Google"); }); test("Cleanup after Google Search Test Suite", async (t) => { await driver.quit(); }); }
`
Dans le code ci-dessus, la méthode fetchDataFromAPI est simulée à partir de la classe MakeRequest.
Pour empêcher la fonction de faire une requête réseau, la méthode mockImplementation() est utilisée pour renvoyer une sortie prédéfinie, qui peut être testée pour des valeurs spécifiques.
Enfin, mock.method() est utilisé pour créer un espion pour tester si la fonction slugifyTitle() est appelée. De plus, combien de fois la fonction est appelée et sa sortie est testée en fonction du titre.
Exécutez les tests à l'aide de la commande ci-dessous :
tests de nœuds/mock.test.js
Le lanceur de tests Node.js vous permet d'exécuter plusieurs tests en parallèle et en même temps au lieu de les exécuter séquentiellement.
Pour exécuter des tests en parallèle dans le lanceur de tests Node.js, vous devez transmettre le paramètre concurrency: true comme deuxième argument de la fonction describe().
Vous trouverez ci-dessous un exemple de la façon d'exécuter des tests en parallèle à l'aide de l'exécuteur de test natif Node.js et de Selenium à l'aide de paramètres de concurrence.
Créez un fichier parallel.test.js dans le dossier tests et ajoutez le code suivant :
`
décrire("Tests du site de commerce électronique", {concurrency : true }, async() => {
laisser le chauffeur ;
npm init -y
`
Exécutez la commande ci-dessous pour exécuter le test :
tests de nœuds/parallel.test.js
Les exécutions de tests ci-dessus sont effectuées sur la grille locale. Cependant, pour faire évoluer vos tests d'automatisation avec Node.js, vous pouvez envisager d'utiliser une approche de test basée sur le cloud.
Les plates-formes d'exécution de tests basées sur l'IA comme LambdaTest vous permettent d'exécuter des tests Node.js sur une infrastructure cloud d'automatisation évolutive, garantissant ainsi la compatibilité et la fiabilité.
En résumé, le lanceur de tests Node.js offre une solution légère pour créer et exécuter des tests automatisés dans vos projets Web. Bien qu'il n'inclut pas toutes les fonctionnalités des frameworks de test populaires, sa simplicité et sa nature conviviale en font une excellente option pour commencer les tests automatisés.
Ce blog traite des fonctionnalités du lanceur de tests intégré à Node.js. Il explique comment créer des tests à l'aide de la fonction describe() et sa syntaxe tout en utilisant des hooks pour les opérations de configuration et de démontage, ainsi que la simulation et l'exécution simultanée de tests dans des threads parallèles pour l'assurance qualité et la stabilité du code JavaScript. à des fins d'amélioration.
Pour les situations de test complexes, vous souhaiterez peut-être évaluer le programme d'exécution de tests par défaut par rapport à des frameworks populaires tels que Mocha, Jasmine ou Jest pour déterminer celui qui correspond le mieux à vos besoins.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!