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 --test
va chercher récursivement les fichiers dont le nom esttest.js
,monfichier.test.js
ou 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