Ce este un test unitar
Un test unitar este un program mic care verifică o singură bucată din codul tău — de obicei o singură funcție. Rulezi testele după fiecare modificare; dacă o modificare strică ceva, un test îți spune imediat, înainte să afle utilizatorii tăi.
Nu ai nevoie de o bibliotecă suplimentară. Node.js vine cu un rulator de teste încorporat: modulul node:test înregistrează testele, modulul node:assert/strict verifică valorile, iar opțiunea --test le rulează.
Testele fac și schimbările sigure: cu teste bune poți rescrie o funcție și afli în câteva secunde dacă se comportă la fel.
Fișiere de test și cazuri de test
Două lucruri fac dintr-un test un test:
1. Numele fișierului se termină în .test.ts — pentru add.ts scrii add.test.ts. Rulatorul de teste caută fișiere denumite astfel și le rulează doar pe acestea.
2. Testul este înregistrat printr-un apel: test("name", fn), importat din node:test. Numele este text liber, deci poate fi o propoziție întreagă — nu există niciun prefix de denumire de reținut.
În interiorul testului apelezi funcția, compari ce ai obținut cu ce vrei și lași assert să raporteze diferența. O aserțiune nereușită aruncă o eroare, iar rulatorul marchează testul ca eșuat. Dacă nu se aruncă nimic, testul trece.
Un prim test care trece
add(2, 3) este comparat cu 5. Valorile coincid, deci assert.equal rămâne tăcut și testul trece. Rulatorul afișează o linie ✔ pentru test și pass 1 în rezumatul de dedesubt.
Ieșire: program TypeScript și rezultatul capturat
import { test } from "node:test"
import assert from "node:assert/strict"
function add(a: number, b: number): number {
return a + b
}
test("add(2, 3) is 5", () => {
const got = add(2, 3)
const want = 5
assert.equal(got, want, `add(2, 3) = ${got}; se aștepta ${want}`)
})
Un test care eșuează
Acest add are o eroare — înmulțește. Testul o prinde: rularea afișează o linie ✖ și fail 1, apoi un raport cu mesajul nostru add(2, 3) = 6; se aștepta 5 și cele două valori, 6 !== 5.
Ieșire: program TypeScript și rezultatul capturat
import { test } from "node:test"
import assert from "node:assert/strict"
// add are o eroare: înmulțește în loc să adune.
function add(a: number, b: number): number {
return a * b
}
test("add(2, 3) is 5", () => {
const got = add(2, 3)
const want = 5
assert.equal(got, want, `add(2, 3) = ${got}; se aștepta ${want}`)
})
Rularea testelor
node --test rulează testele. Dacă îi dai un nume de fișier, rulează acel fișier; dacă nu îi dai nimic, caută în folder fișierele care arată ca teste și le rulează pe toate.
Raportorul decide cât de mult vezi. --test-reporter=spec listează fiecare test după nume, cu un ✔ sau un ✖ în față, iar aceasta este forma folosită în tot acest tutorial. Liniile de rezumat de dedesubt încep cu ℹ și numără câte teste au rulat, au trecut și au eșuat.
Două teste, ambele listate după nume
Fișierul are două funcții mici și câte un test pentru fiecare. Raportorul le arată pe ambele după nume, așa că poți vedea că ambele au rulat și ambele au trecut — rezumatul spune tests 2 și pass 2.
Ieșire: program TypeScript și rezultatul capturat
import { test } from "node:test"
import assert from "node:assert/strict"
function double(n: number): number {
return n * 2
}
function half(n: number): number {
return n / 2
}
test("double(4) is 8", () => {
assert.equal(double(4), 8, "double(4) ar trebui să fie 8")
})
test("half(8) is 4", () => {
assert.equal(half(8), 4, "half(8) ar trebui să fie 4")
})