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.
Toujours dans l’idée d’utiliser le moins de dépendances externes, un bon module pour faire des assertions est node:assert/strict.
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
