TestCase
Klasa TestCase
reprezentuje pojedynczy test. Jest ona dostępna wyłącznie w głównym wątku. Aby uzyskać informacje na temat pracy z zadaniami środowiskowymi, zapoznaj się z sekcją "Runner API".
Instancja TestCase
zawsze posiada właściwość type
o wartości test
. Możesz jej użyć do rozróżnienia różnych typów zadań:
if (task.type === 'test') {
task; // TestCase
}
project
Odwołuje się do TestProject
, do którego należy dany test.
module
Jest to bezpośrednie odwołanie do TestModule
, w którym test został zdefiniowany.
name
Jest to nazwa testu przekazana do funkcji test
.
import { test } from 'vitest';
// [!code word:'the validation works correctly']
test('the validation works correctly', () => {
// ...
});
fullName
Jest to pełna nazwa testu, zawierająca wszystkie nadrzędne grupy testów, oddzielone symbolem >
. Dla poniższego przykładu, pełna nazwa testu to "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
Jest to unikalny identyfikator testu. Identyfikator ten jest deterministyczny i pozostanie taki sam dla danego testu w różnych uruchomieniach. Jest on generowany na podstawie nazwy projektu, identyfikatora modułu oraz kolejności testów.
Struktura identyfikatora wygląda następująco:
1223128da3_0_0
^^^^^^^^^^ hash pliku
^ indeks pakietu
^ indeks testu
TIP
Możesz wygenerować hash pliku za pomocą funkcji generateFileHash
z vitest/node
, dostępnej od Vitest 3:
import { generateFileHash } from 'vitest/node';
const hash = generateFileHash(
'/file/path.js', // ścieżka względna
undefined // nazwa projektu lub `undefined`, jeśli nie została ustawiona
);
DANGER
Nie próbuj parsować identyfikatora. Może on zaczynać się od znaku minus: -1223128da3_0_0_0
.
location
Lokalizacja w module, w której test został zdefiniowany. Lokalizacje są zbierane tylko wtedy, gdy opcja includeTaskLocation
jest włączona w konfiguracji. Należy zauważyć, że ta opcja jest automatycznie włączana, jeśli używane są flagi --reporter=html
, --ui
lub --browser
.
Lokalizacja tego testu będzie równa { line: 3, column: 1 }
:
import { test } from 'vitest'
test('the validation works correctly', () => {
// ...
})
parent
Nadrzędny pakiet testów. Jeśli test został wywołany bezpośrednio w module, jego rodzicem będzie sam moduł.
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';
}
Opcje, z którymi test został skonfigurowany.
ok
function ok(): boolean;
Sprawdza, czy test nie zakończył się błędem w pakiecie. Jeśli test nie został jeszcze zakończony lub został pominięty, zwróci true
.
meta
function meta(): TaskMeta;
Niestandardowe metadane, które zostały dołączone do testu podczas jego wykonania. Metadane można dołączyć, przypisując właściwość do obiektu ctx.task.meta
podczas wykonywania testu:
import { test } from 'vitest';
test('the validation works correctly', ({ task }) => {
// ...
task.meta.decorated = false;
});
Jeśli test nie zakończył jeszcze działania, metadane będą pustym obiektem.
result
function result(): TestResult;
Wyniki testu. Jeśli test nie został jeszcze zakończony lub został dopiero zainicjowany, będzie równy TestResultPending
:
export interface TestResultPending {
/**
* Test został zainicjowany, ale jeszcze nie zakończył działania.
*/
readonly state: 'pending';
/**
* Testy oczekujące nie zawierają błędów.
*/
readonly errors: undefined;
}
Jeśli test został pominięty, zwracana wartość będzie TestResultSkipped
:
interface TestResultSkipped {
/**
* Test został pominięty z flagą `skip` lub `todo`.
* Możesz sprawdzić, która z nich została użyta w opcji `options.mode`.
*/
readonly state: 'skipped';
/**
* Pominięte testy nie zawierają błędów.
*/
readonly errors: undefined;
/**
* Niestandardowa notatka przekazana do `ctx.skip(note)`.
*/
readonly note: string | undefined;
}
TIP
Jeśli test został pominięty, ponieważ inny test ma flagę only
, options.mode
będzie równe skip
.
Jeśli test nie powiódł się, zwracana wartość będzie TestResultFailed
:
interface TestResultFailed {
/**
* Test zakończył się niepowodzeniem.
*/
readonly state: 'failed';
/**
* Błędy, które wystąpiły podczas wykonywania testu.
*/
readonly errors: ReadonlyArray<TestError>;
}
Jeśli test przeszedł pomyślnie, zwracana wartość będzie TestResultPassed
:
interface TestResultPassed {
/**
* Test przeszedł pomyślnie.
*/
readonly state: 'passed';
/**
* Błędy, które wystąpiły podczas wykonywania testu.
*/
readonly errors: ReadonlyArray<TestError> | undefined;
}
WARNING
Należy zauważyć, że test ze stanem passed
nadal może zawierać błędy – może się to zdarzyć, jeśli retry
zostało wywołane co najmniej raz.
diagnostic
function diagnostic(): TestDiagnostic | undefined;
Przydatne informacje o teście, takie jak czas trwania, zużycie pamięci itp.:
interface TestDiagnostic {
/**
* Wskazuje, czy czas trwania testu przekracza wartość `slowTestThreshold`.
*/
readonly slow: boolean;
/**
* Ilość pamięci zużytej przez test w bajtach.
* Ta wartość jest dostępna tylko, jeśli test został wykonany z flagą `logHeapUsage`.
*/
readonly heap: number | undefined;
/**
* Czas wykonania testu w milisekundach.
*/
readonly duration: number;
/**
* Czas w milisekundach, kiedy test się rozpoczął.
*/
readonly startTime: number;
/**
* Liczba ponowień testu.
*/
readonly retryCount: number;
/**
* Liczba powtórzeń testu zgodnie z konfiguracją opcji `repeats`.
* Ta wartość może być niższa, jeśli test nie powiódł się podczas powtórzenia i nie skonfigurowano `retry`.
*/
readonly repeatCount: number;
/**
* Jeśli test przeszedł pomyślnie przy drugiej próbie.
*/
readonly flaky: boolean;
}
INFO
diagnostic()
zwróci undefined
, jeśli test nie został jeszcze zaplanowany do uruchomienia.