TestCase
La classe TestCase
rappresenta un'unità di test. Questa classe è disponibile esclusivamente sul thread principale. Per maggiori dettagli, si prega di consultare la sezione "Runner API" se si sta lavorando con i task di runtime.
L'istanza TestCase
possiede sempre una proprietà type
con il valore 'test'
. Questa può essere utilizzata per distinguere tra i vari tipi di task:
if (task.type === 'test') {
task; // TestCase
}
project
Si riferisce al TestProject
a cui il test appartiene.
module
È un riferimento diretto al TestModule
in cui il test è definito.
name
È il nome del test, come passato alla funzione test
.
import { test } from 'vitest';
// [!code word:'the validation works correctly']
test('the validation works correctly', () => {
// ...
});
fullName
Il nome completo del test, che include tutte le suite genitore, separate dal simbolo >
. Il nome completo di questo test è "the validation logic > the validation works correctly":
import { describe, test } from 'vitest';
// [!code word:'the validation works correctly']
// [!code word:'the validation logic']
describe('the validation logic', () => {
test('the validation works correctly', () => {
// ...
});
});
id
È l'identificatore univoco del test. Questo identificatore è deterministico e rimarrà invariato per lo stesso test in esecuzioni multiple. L'ID è basato sul nome del progetto, sull'ID del modulo e sull'ordine di esecuzione del test.
L'ID si presenta come segue:
1223128da3_0_0
^^^^^^^^^^ hash del file
^ indice della suite
^ indice del test
TIP
È possibile generare l'hash del file utilizzando la funzione generateFileHash
dal modulo vitest/node
, disponibile a partire da Vitest 3:
import { generateFileHash } from 'vitest/node';
const hash = generateFileHash(
'/file/path.js', // percorso relativo
undefined // il nome del progetto o `undefined` se non specificato
);
DANGER
Non tentare di analizzare l'ID. Potrebbe iniziare con un segno meno: -1223128da3_0_0_0
.
location
La posizione all'interno del modulo in cui il test è stato definito. Le posizioni vengono raccolte solo se includeTaskLocation
è abilitato nella configurazione. Si noti che questa opzione è automaticamente abilitata se vengono utilizzati i flag --reporter=html
, --ui
o --browser
.
La posizione di questo test sarà { line: 3, column: 1 }
:
import { test } from 'vitest'
test('the validation works correctly', () => {
// ...
})
parent
La Suite genitore. Se il test è stato chiamato direttamente all'interno del modulo, il genitore sarà il modulo stesso.
options
interface TaskOptions {
readonly each: boolean | undefined;
readonly fails: boolean | undefined;
readonly concurrent: boolean | undefined;
readonly shuffle: boolean | undefined;
readonly retry: number | undefined;
readonly repeats: number | undefined;
readonly mode: 'run' | 'only' | 'skip' | 'todo';
}
Le opzioni con cui il test è stato raccolto.
ok
function ok(): boolean;
Verifica che il test non abbia causato il fallimento della suite. Se il test non è ancora terminato o è stato saltato, restituirà true
.
meta
function meta(): TaskMeta;
Metadati personalizzati che sono stati allegati al test durante la sua esecuzione. I metadati possono essere allegati assegnando una proprietà all'oggetto ctx.task.meta
durante l'esecuzione di un test:
import { test } from 'vitest';
test('the validation works correctly', ({ task }) => {
// ...
task.meta.decorated = false;
});
Se il test non ha ancora terminato l'esecuzione, i metadati saranno un oggetto vuoto.
result
function result(): TestResult;
I risultati del test. Se il test non è ancora terminato o è stato appena raccolto, il risultato sarà TestResultPending
:
export interface TestResultPending {
/**
* Il test è stato raccolto, ma non ha ancora terminato l'esecuzione.
*/
readonly state: 'pending';
/**
* I test in sospeso non presentano errori.
*/
readonly errors: undefined;
}
Se il test è stato saltato, il valore restituito sarà TestResultSkipped
:
interface TestResultSkipped {
/**
* Il test è stato saltato tramite il flag `skip` o `todo`.
* È possibile verificare quale sia stato utilizzato nell'opzione `options.mode`.
*/
readonly state: 'skipped';
/**
* I test saltati non presentano errori.
*/
readonly errors: undefined;
/**
* Una nota personalizzata passata a `ctx.skip(note)`.
*/
readonly note: string | undefined;
}
TIP
Se il test è stato saltato perché un altro test presenta il flag only
, options.mode
sarà uguale a skip
.
Se il test è fallito, il valore restituito sarà TestResultFailed
:
interface TestResultFailed {
/**
* Il test non è riuscito a essere eseguito.
*/
readonly state: 'failed';
/**
* Errori che sono stati lanciati durante l'esecuzione del test.
*/
readonly errors: ReadonlyArray<TestError>;
}
Se il test è passato, il valore restituito sarà TestResultPassed
:
interface TestResultPassed {
/**
* Il test è passato con successo.
*/
readonly state: 'passed';
/**
* Errori che sono stati lanciati durante l'esecuzione del test.
*/
readonly errors: ReadonlyArray<TestError> | undefined;
}
WARNING
Si noti che un test con stato 'passed'
può comunque presentare errori allegati; ciò può accadere se il meccanismo di retry
è stato attivato almeno una volta.
diagnostic
function diagnostic(): TestDiagnostic | undefined;
Informazioni utili sul test, come durata, utilizzo della memoria, ecc.:
interface TestDiagnostic {
/**
* Indica se la durata del test è superiore a `slowTestThreshold`.
*/
readonly slow: boolean;
/**
* La quantità di memoria utilizzata dal test in byte.
* Questo valore è disponibile solo se il test è stato eseguito con il flag `logHeapUsage`.
*/
readonly heap: number | undefined;
/**
* Il tempo impiegato per eseguire il test in ms.
*/
readonly duration: number;
/**
* Il tempo in ms in cui il test è iniziato.
*/
readonly startTime: number;
/**
* Il numero di volte in cui il test è stato ritentato.
*/
readonly retryCount: number;
/**
* Il numero di volte in cui il test è stato ripetuto, come configurato dall'opzione `repeats`.
* Questo valore può essere inferiore se il test è fallito durante la ripetizione e non è stato configurato alcun tentativo di `retry`.
*/
readonly repeatCount: number;
/**
* Indica se il test è passato al secondo tentativo.
*/
readonly flaky: boolean;
}
INFO
diagnostic()
restituirà undefined
se il test non è ancora stato programmato per l'esecuzione.