NodeJS Test Runner
Avec NodeJS v18, il est possible d’écrire ses tests sans librairie externe grâce au module node:test
Avec NodeJS v18, il est possible d’écrire ses tests sans librairie externe grâce au module
node:test
Ce nouveau module permet de définir un jeu de test, que l’on pourra jouer via la commande
[node --test](https://nodejs.org/api/test.html#running-tests-from-the-command-line).
Toujours dans l’idée d’utiliser le moins de dépendances externes, un bon module pour faire des
assertions est [node:assert/strict](https://nodejs.org/api/assert.html#strict-assertion-mode).
En prenant un exemple
Dans un fichier index.js
export function canRegister({ age, country, job }) {
return age >= 18 && country === "US" && job === "engineer";
}
En utilisant le test runner de Node, on peut écrire le test suivant dans le fichier index.test.js
import assert from "node:assert/strict";
import { describe, it } from "node:test";
import { canRegister } from "./index.js";
describe("canRegister", () => {
it("returns true when age is 18, country is US, and job is engineer", () => {
const result = canRegister({ age: 18, country: "US", job: "engineer" });
assert.strictEqual(result, true);
});
it("returns false when age is 17, country is US, and job is engineer", () => {
const result = canRegister({ age: 17, country: "US", job: "engineer" });
assert.strictEqual(result, false);
});
});
À noter qu’il est possible de skip un test avec la syntaxe suivante it([name], { skip: true }[, fn]) ou en ajoutant it.skip
Et on exécute le test avec la commande node --test
node --testva chercher récursivement les fichiers dont le nom esttest.js,monfichier.test.jsou encoretest-monfichier.js(plus de détail dans la doc). Il est aussi possible de passer un fichier en argument à la commandenode --test.
TAP version 13
# Subtest: /node-test-runner/index.test.js
ok 1 - /node-test-runner/index.test.js
---
duration_ms: 44.544125
...
1..1
# tests 1
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 47.909458
On obtient un retour au format TAP (Test Anything Protocol) https://testanything.org/tap-specification.html ce qui nous permettra de pouvoir utiliser des reporters compatibles avec ce standard.
Par exemple, le module tap-spec permet d’obtenir le rendu suivant :

Il suffit de piper le résultat de node --test dans tape-spec : node --test | tap-spec
Une liste de reporters est disponible ici https://github.com/ljharb/tape#pretty-reporters
Spy, stub et mocks
Contrairement à jest, node:test ne permet pas de faire des spy ou mocks de modules.
Il est possible d’utiliser les librairies suivantes :
- spying et stubbing avec sinon
- snapshots avec snapshot-assertion