Două moduri de a eșua
Un test poate raporta o problemă în două moduri, iar diferența stă în ce se întâmplă după aceea:
Fiecare aserțiune din node:assert/strict aruncă o eroare atunci când eșuează. O eroare aruncată încheie testul în care se află, așa că verificările scrise după ea nu mai rulează niciodată. Acesta este comportamentul de eșec rapid și este cel pe care îl obții implicit.
Ca să raportezi o problemă și să continui verificările, pune fiecare verificare în propriul apel test(…). Testele sunt independente: un test care eșuează nu îl oprește pe următorul, așa că o singură rulare poate raporta mai multe probleme deodată.
Ambele forme acceptă un mesaj. assert.equal(got, want, "…") și assert.ok(value, "…") afișează textul tău în locul celui implicit.
Teste separate: raportează și continuă
Când vrei să verifici mai multe cazuri la rând, dă fiecărui caz propriul test. Un caz stricat este raportat, iar cazurile de după el sunt tot verificate.
Astfel, o singură rulare îți arată toată paguba — nu doar primul caz stricat.
Vezi toate cazurile stricate deodată
Această funcție add ignoră b, așa că toate cele trei verificări eșuează. Pentru că fiecare verificare este un test separat, toate cele trei linii ✖ apar într-o singură rulare, iar rezumatul spune fail 3. Scrise ca trei verificări într-un singur test, doar prima ar fi fost raportată.
Ieșire: program TypeScript și rezultatul capturat
import { test } from "node:test"
import assert from "node:assert/strict"
// add are o eroare: ignoră b.
function add(a: number, b: number): number {
return a
}
// Câte un test pentru fiecare verificare: un eșec nu le ascunde pe celelalte.
test("add(2, 2) is 4", () => {
assert.equal(add(2, 2), 4)
})
test("add(2, 3) is 5", () => {
assert.equal(add(2, 3), 5)
})
test("add(10, 1) is 11", () => {
assert.equal(add(10, 1), 11)
})
O aserțiune eșuată oprește testul
Uneori, o verificare eșuată înseamnă că restul testului nu mai poate funcționa. Un caz tipic: testul pregătește mai întâi o valoare, apoi o inspectează. Dacă pregătirea a mers deja prost, inspectarea ar fi inutilă sau chiar ar duce la o eroare gravă.
Aici aserțiunea care aruncă o eroare este exact ce îți dorești. Ea încheie testul chiar în acel punct, iar verificările de sub ea nu mai rulează niciodată — și tocmai acesta este scopul.
Oprire înainte de verificările inutile
splitWords are o eroare (desparte după caracterul greșit), așa că se întoarce 1 parte în loc de 3. Verificarea lungimii eșuează și aruncă o eroare, așa că verificarea primei părți de mai jos nu este atinsă niciodată — raportul arată acel singur eșec și nimic altceva.
Ieșire: program TypeScript și rezultatul capturat
import { test } from "node:test"
import assert from "node:assert/strict"
// splitWords are o eroare: desparte după ";" în loc de ",".
function splitWords(s: string): string[] {
return s.split(";")
}
test("splitWords finds three parts", () => {
const parts = splitWords("one,two,three")
assert.equal(parts.length, 3, `am obținut ${parts.length} părți, se așteptau 3 — nu le pot verifica`)
// Nu se ajunge aici cât timp eroarea este prezentă.
assert.equal(parts[0], "one")
})
Mesaje la verificările booleene
assert.ok(value, message) este verificarea pentru o valoare booleană simplă: eșuează atunci când valoarea este falsă. Folosește-o acolo unde nu există o pereche obținut și așteptat de comparat, ci doar un răspuns de tip da sau nu.
Mesajul este al doilea argument și este opțional. Fără el, executorul de teste tot afișează textul său și valorile comparate, așa că merită să scrii propriul mesaj atunci când spune mai mult decât atât.
Mesaje simple
Două verificări booleene simple, fiecare în propriul test, fiecare cu un mesaj simplu. Ambele trec aici, așa că mesajele rămân tăcute, iar rezumatul spune pass 2.
Ieșire: program TypeScript și rezultatul capturat
import { test } from "node:test"
import assert from "node:assert/strict"
function isEven(n: number): boolean {
return n % 2 === 0
}
test("4 is even", () => {
assert.ok(isEven(4), "4 ar trebui să fie par")
})
test("3 is not even", () => {
assert.ok(!isEven(3), "3 nu ar trebui să fie par")
})