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

Reporter ​

WARNING

Dies ist eine erweiterte API. Wenn Sie lediglich die integrierten Reporter konfigurieren möchten, lesen Sie bitte den Leitfaden "Reporter".

Vitest verfügt über einen eigenen Testlauf-Lebenszyklus, der durch die folgenden Reporter-Methoden abgebildet wird:

  • onInit
  • onTestRunStart
    • onTestModuleQueued
    • onTestModuleCollected
    • onTestModuleStart
      • onTestSuiteReady
        • onHookStart(beforeAll)
        • onHookEnd(beforeAll)
          • onTestCaseReady
            • onTestAnnotate 3.2.0+
            • onHookStart(beforeEach)
            • onHookEnd(beforeEach)
            • onHookStart(afterEach)
            • onHookEnd(afterEach)
          • onTestCaseResult
        • onHookStart(afterAll)
        • onHookEnd(afterAll)
      • onTestSuiteResult
    • onTestModuleEnd
  • onTestRunEnd

Tests und Suiten innerhalb eines einzelnen Moduls werden der Reihe nach gemeldet, es sei denn, sie wurden übersprungen. Alle übersprungenen Tests werden am Ende der Suite/des Moduls aufgeführt.

Beachten Sie, dass Vitest Testmodule parallel meldet, da sie parallel ausgeführt werden können.

Dieser Leitfaden listet alle unterstützten Reporter-Methoden auf. Vergessen Sie jedoch nicht, dass Sie, anstatt einen eigenen Reporter zu erstellen, einen vorhandenen erweitern können:

ts
import { BaseReporter } from 'vitest/reporters';

export default class CustomReporter extends BaseReporter {
  onTestRunEnd(testModules, errors) {
    console.log(testModules.length, 'tests finished running');
    super.onTestRunEnd(testModules, errors);
  }
}

onInit ​

ts
function onInit(vitest: Vitest): Awaitable<void>;

Diese Methode wird aufgerufen, wenn Vitest initialisiert oder gestartet wurde, jedoch bevor die Tests gefiltert wurden.

INFO

Intern wird diese Methode innerhalb von vitest.start, vitest.init oder vitest.mergeReports aufgerufen. Wenn Sie die programmatische API verwenden, stellen Sie sicher, dass Sie je nach Ihren Anforderungen eine dieser Methoden aufrufen, bevor Sie beispielsweise vitest.runTestSpecifications aufrufen. Die integrierte CLI führt die Methoden immer in der korrekten Reihenfolge aus.

Beachten Sie, dass Sie auch über die Eigenschaft project von Testfällen, Suiten und Testmodulen auf die vitest-Instanz zugreifen können. Es kann jedoch auch nützlich sein, in dieser Methode eine Referenz auf vitest zu speichern.

Beispiel
ts
import type { Reporter, TestSpecification, Vitest } from 'vitest/node';

class MyReporter implements Reporter {
  private vitest!: Vitest;

  onInit(vitest: Vitest) {
    this.vitest = vitest;
  }

  onTestRunStart(specifications: TestSpecification[]) {
    console.log(
      specifications.length,
      'Testdateien werden in',
      this.vitest.config.root,
      'ausgeführt'
    );
  }
}

export default new MyReporter();

onBrowserInit experimentell ​

ts
function onBrowserInit(project: TestProject): Awaitable<void>;

Diese Methode wird aufgerufen, wenn die Browser-Instanz initialisiert wird. Sie erhält eine Instanz des Projekts, für das der Browser initialisiert wird. project.browser ist immer definiert, wenn diese Methode aufgerufen wird.

onTestRunStart ​

ts
function onTestRunStart(specifications: TestSpecification[]): Awaitable<void>;

Diese Methode wird aufgerufen, wenn ein neuer Testlauf gestartet wurde. Sie erhält ein Array von Testspezifikationen, die zur Ausführung geplant sind. Dieses Array ist schreibgeschützt und dient nur zu Informationszwecken.

Wenn Vitest keine Testdateien zum Ausführen gefunden hat, wird dieses Ereignis mit einem leeren Array aufgerufen, und anschließend wird onTestRunEnd sofort danach aufgerufen.

Beispiel
ts
import type { Reporter, TestSpecification } from 'vitest/node';

class MyReporter implements Reporter {
  onTestRunStart(specifications: TestSpecification[]) {
    console.log(specifications.length, 'Testdateien werden ausgeführt');
  }
}

export default new MyReporter();

HINWEIS ZUR VERALTUNG

Diese Methode wurde in Vitest 3 hinzugefügt und ersetzt onPathsCollected und onSpecsCollected, die beide nun veraltet sind.

onTestRunEnd ​

ts
function onTestRunEnd(
  testModules: ReadonlyArray<TestModule>,
  unhandledErrors: ReadonlyArray<SerializedError>,
  reason: TestRunEndReason
): Awaitable<void>;

Diese Methode wird aufgerufen, nachdem alle Tests abgeschlossen sind und die Code-Abdeckung alle Berichte zusammengeführt hat, sofern aktiviert. Beachten Sie, dass Sie die Code-Abdeckungsinformationen im Hook onCoverage erhalten können.

Sie erhält eine schreibgeschützte Liste von Testmodulen. Sie können diese über die Eigenschaft testModule.children durchlaufen, um den Status und eventuelle Fehler zu berichten.

Das zweite Argument ist eine schreibgeschützte Liste von unbehandelten Fehlern, die Vitest keinem Test zuordnen konnte. Diese können außerhalb des Testlaufs aufgrund eines Fehlers in einem Plugin oder innerhalb des Testlaufs als Nebeneffekt einer nicht-awaiteten Funktion auftreten (z. B. ein Timeout, der einen Fehler ausgelöst hat, nachdem der Test abgeschlossen war).

Das dritte Argument gibt an, warum der Testlauf beendet wurde:

  • passed: Der Testlauf wurde normal beendet und es gibt keine Fehler.
  • failed: Der Testlauf hat mindestens einen Fehler (aufgrund eines Syntaxfehlers während der Sammlung oder eines tatsächlichen Fehlers während der Testausführung).
  • interrupted: Der Testlauf wurde durch den Aufruf von vitest.cancelCurrentRun unterbrochen oder Strg+C wurde im Terminal gedrückt (zu beachten ist, dass es in diesem Fall dennoch möglich ist, fehlgeschlagene Tests zu haben).

Wenn Vitest keine Testdateien zum Ausführen gefunden hat, wird dieses Ereignis mit leeren Arrays von Modulen und Fehlern aufgerufen, und der Status hängt vom Wert von config.passWithNoTests ab.

Beispiel
ts
import type {
  Reporter,
  SerializedError,
  TestModule,
  TestRunEndReason,
  TestSpecification,
} from 'vitest/node';

class MyReporter implements Reporter {
  onTestRunEnd(
    testModules: ReadonlyArray<TestModule>,
    unhandledErrors: ReadonlyArray<SerializedError>,
    reason: TestRunEndReason
  ) {
    if (reason === 'passed') {
      testModules.forEach(module => console.log(module.moduleId, 'war erfolgreich'));
    } else if (reason === 'failed') {
      // Hinweis: Dabei werden mögliche Fehler in Suiten nicht berücksichtigt
      // Sie können diese von testSuite.errors() erhalten
      for (const testCase of testModules.children.allTests()) {
        if (testCase.result().state === 'failed') {
          console.log(
            testCase.fullName,
            'in der',
            testCase.module.moduleId,
            'ist fehlgeschlagen'
          );
          console.log(testCase.result().errors);
        }
      }
    } else {
      console.log('Testlauf wurde unterbrochen, Berichterstattung entfällt');
    }
  }
}

export default new MyReporter();

HINWEIS ZUR VERALTUNG

Diese Methode wurde in Vitest 3 hinzugefügt und ersetzt onFinished, die nun veraltet ist.

onCoverage ​

ts
function onCoverage(coverage: unknown): Awaitable<void>;

Dieser Hook wird aufgerufen, nachdem die Coverage-Ergebnisse verarbeitet wurden. Die Reporter des Coverage-Providers werden nach diesem Hook aufgerufen. Der Typ von coverage hängt vom coverage.provider ab. Für die standardmäßigen integrierten Provider von Vitest können Sie die Typen aus dem Paket istanbul-lib-coverage importieren:

ts
import type { CoverageMap } from 'istanbul-lib-coverage';

declare function onCoverage(coverage: CoverageMap): Awaitable<void>;

Wenn Vitest keine Abdeckung durchgeführt hat, wird dieser Hook nicht aufgerufen.

onTestModuleQueued ​

ts
function onTestModuleQueued(testModule: TestModule): Awaitable<void>;

Diese Methode wird aufgerufen, unmittelbar bevor Vitest die Setup-Datei und das Testmodul selbst importiert. Das bedeutet, dass testModule noch keine children haben wird, aber Sie können es als nächstes auszuführendes Testmodul berichten.

onTestModuleCollected ​

ts
function onTestModuleCollected(testModule: TestModule): Awaitable<void>;

Diese Methode wird aufgerufen, wenn alle Tests innerhalb der Datei gesammelt wurden, was bedeutet, dass die testModule.children-Sammlung gefüllt ist, die Tests jedoch noch keine Ergebnisse haben.

onTestModuleStart ​

ts
function onTestModuleStart(testModule: TestModule): Awaitable<void>;

Diese Methode wird direkt nach onTestModuleCollected aufgerufen, es sei denn, Vitest läuft im Sammlungsmodus (vitest.collect() oder vitest collect in der CLI). In diesem Fall wird sie überhaupt nicht aufgerufen, da keine Tests zur Ausführung anstehen.

onTestModuleEnd ​

ts
function onTestModuleEnd(testModule: TestModule): Awaitable<void>;

Diese Methode wird aufgerufen, wenn jeder Test im Modul abgeschlossen ist. Das bedeutet, dass jeder Test innerhalb von testModule.children ein test.result() haben wird, das nicht den Status pending hat.

onHookStart ​

ts
function onHookStart(context: ReportedHookContext): Awaitable<void>;

Diese Methode wird aufgerufen, wenn einer dieser Hooks gestartet wurde:

  • beforeAll
  • afterAll
  • beforeEach
  • afterEach

Wenn beforeAll oder afterAll gestartet werden, ist die entity entweder eine TestSuite oder ein TestModule.

Wenn beforeEach oder afterEach gestartet werden, ist die entity immer ein TestCase.

WARNING

Die Methode onHookStart wird nicht aufgerufen, wenn der Hook während des Testlaufs nicht durchlaufen wurde.

onHookEnd ​

ts
function onHookEnd(context: ReportedHookContext): Awaitable<void>;

Diese Methode wird aufgerufen, wenn einer dieser Hooks beendet wurde:

  • beforeAll
  • afterAll
  • beforeEach
  • afterEach

Wenn beforeAll oder afterAll beendet wurden, ist die entity entweder eine TestSuite oder ein TestModule.

Wenn beforeEach oder afterEach beendet wurden, ist die entity immer ein TestCase.

WARNING

Die Methode onHookEnd wird nicht aufgerufen, wenn der Hook während des Testlaufs nicht durchlaufen wurde.

onTestSuiteReady ​

ts
function onTestSuiteReady(testSuite: TestSuite): Awaitable<void>;

Diese Methode wird aufgerufen, bevor die Suite ihre Tests ausführt. Diese Methode wird auch aufgerufen, wenn die Suite übersprungen wurde.

Enthält die Datei keine Suiten, wird diese Methode nicht aufgerufen. Ziehen Sie die Verwendung von onTestModuleStart in Betracht, um diesen Anwendungsfall zu berücksichtigen.

onTestSuiteResult ​

ts
function onTestSuiteResult(testSuite: TestSuite): Awaitable<void>;

Diese Methode wird aufgerufen, nachdem die Suite ihre Tests beendet hat. Diese Methode wird auch aufgerufen, wenn die Suite übersprungen wurde.

Enthält die Datei keine Suiten, wird diese Methode nicht aufgerufen. Ziehen Sie die Verwendung von onTestModuleEnd in Betracht, um diesen Anwendungsfall zu berücksichtigen.

onTestCaseReady ​

ts
function onTestCaseReady(testCase: TestCase): Awaitable<void>;

Diese Methode wird aufgerufen, bevor der Test gestartet oder übersprungen wurde. Beachten Sie, dass beforeEach- und afterEach-Hooks als Teil des Tests gelten, da sie das Ergebnis beeinflussen können.

WARNING

Beachten Sie, dass testCase.result() bereits den Status passed oder failed haben kann, wenn onTestCaseReady aufgerufen wird. Dies kann passieren, wenn der Test zu schnell lief und sowohl onTestCaseReady als auch onTestCaseResult im selben Microtask ausgeführt werden sollten.

onTestCaseResult ​

ts
function onTestCaseResult(testCase: TestCase): Awaitable<void>;

Diese Methode wird aufgerufen, wenn der Test abgeschlossen oder übersprungen wurde. Beachten Sie, dass dies nach Abschluss des afterEach-Hooks aufgerufen wird, sofern vorhanden.

Zu diesem Zeitpunkt hat testCase.result() einen Status, der nicht pending ist.

onTestAnnotate 3.2.0+ ​

ts
function onTestAnnotate(
  testCase: TestCase,
  annotation: TestAnnotation
): Awaitable<void>;

Der onTestAnnotate-Hook ist mit der Methode context.annotate verbunden. Wenn annotate aufgerufen wird, serialisiert Vitest es und sendet dieselbe Annotation an den Haupt-Thread, mit der der Reporter interagieren kann.

Wenn der Pfad angegeben ist, speichert Vitest ihn in einem separaten Verzeichnis (konfiguriert durch attachmentsDir) und passt die path-Eigenschaft an, um darauf zu verweisen.

Pager
Vorherige SeiteRunner API
Nächste SeiteAufgaben-Metadaten

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/api/reporters

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2021-Present Vitest Team