Skip to content
Vitest 3
Main Navigation Leitfaden & APIKonfigurationBrowser-ModusFortgeschritten API
3.2.0
2.1.9
1.6.1
0.34.6

Deutsch

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Deutsch

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Aussehen

Sidebar Navigation

API

Node API

Erweiterte API

Vitest API

TestProject

TestSpecification

Test Task API

TestCase

TestSuite

TestModule

TestCollection

Plugin-API

Runner API

Reporter

Aufgaben-Metadaten

Leitfaden

Tests ausführen

Reporter erweitern

Benutzerdefinierter Pool

Vitest konfigurieren

Test-API-Referenz

Auf dieser Seite

Aufgaben-Metadaten ​

WARNING

Vitest stellt eine experimentelle private API zur Verfügung. Breaking Changes halten sich möglicherweise nicht an SemVer. Bitte pinnen Sie die Vitest-Version fest, wenn Sie diese verwenden.

Wenn Sie einen benutzerdefinierten Reporter entwickeln oder die Vitest Node.js API verwenden, kann es nützlich sein, Daten von Tests, die in verschiedenen Kontexten ausgeführt werden, an Ihren Reporter oder benutzerdefinierten Vitest-Handler weiterzugeben.

Dafür ist es nicht praktikabel, sich auf den Testkontext zu verlassen, da dieser nicht serialisiert werden kann. Mit Vitest können Sie jedoch die meta-Property nutzen, die für jeden Task (Suite oder Test) verfügbar ist, um Daten von Ihren Tests an den Node.js-Prozess zu übermitteln. Es ist wichtig zu beachten, dass diese Kommunikation nur in eine Richtung erfolgt, da die meta-Property nur innerhalb des Testkontexts geändert werden kann. Änderungen, die im Node.js-Kontext vorgenommen werden, sind in Ihren Tests nicht erkennbar.

Sie können die meta-Property im Testkontext oder innerhalb der beforeAll/afterAll-Hooks für Suite-Tasks befüllen.

ts
afterAll(suite => {
  suite.meta.done = true;
});

test('custom', ({ task }) => {
  task.meta.custom = 'some-custom-handler';
});

Sobald ein Test abgeschlossen ist, sendet Vitest einen Task, der das Ergebnis und die meta-Daten enthält, über RPC an den Node.js-Prozess und gibt diese dann in onTestCaseResult und anderen Hooks weiter, die Zugriff auf Tasks haben. Um diesen Testfall zu verarbeiten, können Sie die Methode onTestCaseResult in Ihrer Reporter-Implementierung verwenden:

ts
import type { Reporter, TestCase, TestModule } from 'vitest/node';

export default {
  onTestCaseResult(testCase: TestCase) {
    // custom === 'some-custom-handler' ✅
    const { custom } = testCase.meta();
  },
  onTestRunEnd(testModule: TestModule) {
    testModule.meta().done === true;
    testModule.children.at(0).meta().custom === 'some-custom-handler';
  },
} satisfies Reporter;

VORSICHT

Vitest verwendet verschiedene Methoden zur Kommunikation mit dem Node.js-Prozess:

  • Wenn Vitest Tests in Worker-Threads ausführt, sendet es Daten über MessagePort.
  • Wenn Vitest einen Kindprozess verwendet, sendet es die Daten als serialisierten Buffer über die process.send API.
  • Wenn Vitest Tests im Browser ausführt, stringifiziert es die Daten mit dem flatted-Paket.

Diese Property ist auch in jedem Test im json-Reporter vorhanden. Stellen Sie daher sicher, dass die Daten in JSON serialisiert werden können.

Stellen Sie außerdem sicher, dass Sie Fehlereigenschaften serialisieren, bevor Sie sie setzen.

Sie können diese Informationen auch aus dem Vitest-Status abrufen, wenn die Tests abgeschlossen sind:

ts
const vitest = await createVitest('test');
const { testModules } = await vitest.start();

const testModule = testModules[0];
testModule.meta().done === true;
testModule.children.at(0).meta().custom === 'some-custom-handler';

Es ist auch möglich, Typdefinitionen bei der Verwendung von TypeScript zu erweitern:

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean;
    custom?: string;
  }
}
Pager
Vorherige SeiteReporter
Nächste SeiteTests ausführen

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/metadata

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2021-Present Vitest Team