TestCase
Die Klasse TestCase
repräsentiert einen einzelnen Test. Diese Klasse ist ausschließlich im Hauptthread verfügbar. Für die Arbeit mit Laufzeitaufgaben lesen Sie bitte die "Runner API".
Eine TestCase
-Instanz besitzt immer eine type
-Eigenschaft mit dem Wert test
. Diese Eigenschaft kann zur Unterscheidung zwischen verschiedenen Task-Typen verwendet werden:
if (task.type === 'test') {
task; // TestCase
}
project
Dies ist ein Verweis auf das TestProject
, zu dem der Test gehört.
module
Dies ist ein direkter Verweis auf das TestModule
, in dem der Test definiert ist.
name
Dies ist der Testname, der an die test
-Funktion übergeben wird.
import { test } from 'vitest';
// [!code word:'the validation works correctly']
test('the validation works correctly', () => {
// ...
});
fullName
Der vollständige Name des Tests, der alle übergeordneten Test-Suiten einschließt und durch das Symbol >
getrennt ist. Für das folgende Beispiel lautet der vollständige Name des Tests "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
Dies ist die eindeutige Kennung für den Test. Diese ID ist deterministisch und bleibt für denselben Test über mehrere Ausführungen hinweg gleich. Die ID basiert auf dem Projekt-Namen, der Modul-ID und der Testreihenfolge.
Die ID hat folgendes Format:
1223128da3_0_0
^^^^^^^^^^ Datei-Hash
^ Suite-Index
^ Test-Index
TIP
Sie können den Datei-Hash mit der Funktion generateFileHash
aus vitest/node
generieren, die seit Vitest 3 verfügbar ist:
import { generateFileHash } from 'vitest/node';
const hash = generateFileHash(
'/file/path.js', // relativer Pfad
undefined // der Projektname oder `undefined`, falls dieser nicht gesetzt ist
);
DANGER
Versuchen Sie nicht, die ID zu parsen. Sie kann am Anfang ein Minuszeichen enthalten: -1223128da3_0_0_0
.
location
Die Position im Modul, an der der Test definiert wurde. Positionsinformationen werden nur gesammelt, wenn includeTaskLocation
in der Konfiguration aktiviert ist. Beachten Sie, dass diese Option automatisch aktiviert wird, wenn die Flags --reporter=html
, --ui
oder --browser
verwendet werden.
Die Position dieses Tests wird { line: 3, column: 1 }
sein:
import { test } from 'vitest'
test('the validation works correctly', () => {
// ...
})
parent
Die übergeordnete Test-Suite. Wenn der Test direkt innerhalb des Moduls aufgerufen wurde, ist das übergeordnete Element das Modul selbst.
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';
}
Die Optionen, mit denen der Test definiert wird.
ok
function ok(): boolean;
Prüft, ob der Test die Suite nicht zum Fehlschlagen gebracht hat. Wenn der Test noch nicht abgeschlossen oder übersprungen wurde, wird true
zurückgegeben.
meta
function meta(): TaskMeta;
Benutzerdefinierte Metadaten, die während der Ausführung an den Test angehängt werden. Die Metadaten können angehängt werden, indem eine Eigenschaft dem Objekt ctx.task.meta
während eines Testlaufs zugewiesen wird:
import { test } from 'vitest';
test('the validation works correctly', ({ task }) => {
// ...
task.meta.decorated = false;
});
Wenn der Test noch nicht beendet wurde, sind die Metadaten ein leeres Objekt.
result
function result(): TestResult;
Die Ergebnisse des Tests. Wenn der Test noch nicht abgeschlossen oder gerade erst initialisiert wurde, ist der Wert TestResultPending
:
export interface TestResultPending {
/**
* Der Test wurde initialisiert, ist aber noch nicht abgeschlossen.
*/
readonly state: 'pending';
/**
* Noch nicht ausgeführte Tests haben keine Fehler.
*/
readonly errors: undefined;
}
Wenn der Test übersprungen wurde, ist der Rückgabewert TestResultSkipped
:
interface TestResultSkipped {
/**
* Der Test wurde mit dem Flag `skip` oder `todo` übersprungen.
* Welches Flag verwendet wurde, können Sie in der Option `options.mode` sehen.
*/
readonly state: 'skipped';
/**
* Übersprungene Tests weisen keine Fehler auf.
*/
readonly errors: undefined;
/**
* Eine benutzerdefinierte Notiz, die an `ctx.skip(note)` übergeben wurde.
*/
readonly note: string | undefined;
}
TIP
Wenn der Test übersprungen wurde, weil ein anderer Test das only
-Flag hat, ist options.mode
gleich skip
.
Wenn der Test fehlgeschlagen ist, ist der Rückgabewert TestResultFailed
:
interface TestResultFailed {
/**
* Der Test konnte nicht ausgeführt werden.
*/
readonly state: 'failed';
/**
* Fehler, die während der Testausführung aufgetreten sind.
*/
readonly errors: ReadonlyArray<TestError>;
}
Wenn der Test erfolgreich war, ist der Rückgabewert TestResultPassed
:
interface TestResultPassed {
/**
* Der Test wurde erfolgreich bestanden.
*/
readonly state: 'passed';
/**
* Fehler, die während der Testausführung aufgetreten sind.
*/
readonly errors: ReadonlyArray<TestError> | undefined;
}
WARNING
Beachten Sie, dass ein Test mit dem Status passed
immer noch Fehler enthalten kann – dies kann passieren, wenn retry
mindestens einmal ausgelöst wurde.
diagnostic
function diagnostic(): TestDiagnostic | undefined;
Nützliche Testinformationen wie Laufzeit, Speicherverbrauch etc.:
interface TestDiagnostic {
/**
* Gibt an, ob die Dauer des Tests über `slowTestThreshold` liegt.
*/
readonly slow: boolean;
/**
* Die vom Test verwendete Speichermenge in Bytes.
* Dieser Wert ist nur verfügbar, wenn der Test mit dem Flag `logHeapUsage` ausgeführt wurde.
*/
readonly heap: number | undefined;
/**
* Die Zeit, die zur Ausführung des Tests in Millisekunden benötigt wird.
*/
readonly duration: number;
/**
* Der Teststartzeitpunkt in Millisekunden.
*/
readonly startTime: number;
/**
* Die Anzahl der Wiederholungen des Tests.
*/
readonly retryCount: number;
/**
* Die Anzahl der Testwiederholungen, wie durch die Option `repeats` konfiguriert.
* Dieser Wert kann niedriger sein, wenn der Test während der Wiederholung fehlschlug und kein `retry` konfiguriert ist.
*/
readonly repeatCount: number;
/**
* Gibt an, ob der Test bei einem zweiten Wiederholungsversuch bestanden wurde.
*/
readonly flaky: boolean;
}
INFO
diagnostic()
gibt undefined
zurück, wenn der Test noch nicht zur Ausführung eingeplant wurde.