Skip to content
Vitest 3
Main Navigation Przewodnik & APIKonfiguracjaTryb przeglądarkiZaawansowane API
3.2.0
2.1.9
1.6.1
0.34.6

Polski

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

Polski

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

Wygląd

Sidebar Navigation

API

Node API

Zaawansowane API

Vitest API

TestProject

TestSpecification

Test Task API

TestCase

TestSuite

TestModule

TestCollection

API wtyczek

API modułu uruchamiającego

Reportery

Metadane zadań

Przewodnik

Uruchamianie testów

Rozszerzanie Reporterów

Niestandardowa pula

Konfiguracja Vitest

Dokumentacja API testowego

Na tej stronie

Reportery ​

WARNING

To jest zaawansowane API. Jeśli chcesz tylko skonfigurować wbudowane reportery, przeczytaj przewodnik "Reportery".

Vitest posiada własny cykl życia przebiegu testów, który jest reprezentowany przez następujące metody reporterów:

  • 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

Testy i zestawy w pojedynczym module będą raportowane w kolejności, chyba że zostały pominięte. Wszystkie pominięte testy są raportowane na końcu zestawu/modułu.

Należy pamiętać, że moduły testowe mogą działać równolegle, więc Vitest będzie je raportować równolegle.

Ten przewodnik wymienia wszystkie obsługiwane metody reportera. Jednak zamiast tworzyć własny reporter, możesz rozszerzyć istniejący:

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>;

Ta metoda jest wywoływana, gdy Vitest został zainicjowany lub uruchomiony, ale zanim testy zostały przefiltrowane.

INFO

Wewnętrznie ta metoda jest wywoływana wewnątrz vitest.start, vitest.init lub vitest.mergeReports. Jeśli używasz programistycznego API, upewnij się, że wywołasz jedną z nich w zależności od swoich potrzeb, zanim wywołasz na przykład vitest.runTestSpecifications. Wbudowany CLI zawsze uruchamia metody w prawidłowej kolejności.

Możesz również uzyskać dostęp do instancji vitest z przypadków testowych, zestawów i modułów testowych za pośrednictwem właściwości project, ale przechowywanie odniesienia do vitest w tej metodzie może być również przydatne.

Przykład
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,
      'test files will run in',
      this.vitest.config.root
    );
  }
}

export default new MyReporter();

onBrowserInit eksperymentalny ​

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

Ta metoda jest wywoływana podczas inicjowania instancji przeglądarki. Otrzymuje instancję projektu, dla którego przeglądarka jest inicjowana. Właściwość project.browser zawsze będzie zdefiniowana, gdy ta metoda zostanie wywołana.

onTestRunStart ​

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

Ta metoda jest wywoływana, gdy rozpoczyna się nowe uruchomienie testów. Otrzymuje tablicę specyfikacji testowych zaplanowanych do uruchomienia. Ta tablica jest tylko do odczytu i dostępna wyłącznie w celach informacyjnych.

Jeśli Vitest nie znalazł żadnych plików testowych do uruchomienia, to zdarzenie zostanie wywołane z pustą tablicą, a następnie onTestRunEnd zostanie wywołane natychmiast po tym.

Przykład
ts
import type { Reporter, TestSpecification } from 'vitest/node';

class MyReporter implements Reporter {
  onTestRunStart(specifications: TestSpecification[]) {
    console.log(specifications.length, 'test files will run');
  }
}

export default new MyReporter();

UWAGA O DEPREKACJI

Ta metoda została dodana w Vitest 3, zastępując onPathsCollected i onSpecsCollected, z których obie są teraz przestarzałe.

onTestRunEnd ​

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

Ta metoda jest wywoływana po zakończeniu wszystkich testów i scaleniu wszystkich raportów pokrycia, jeśli jest włączone. Należy pamiętać, że informacje o pokryciu można uzyskać w zaczepie onCoverage.

Otrzymuje listę modułów testowych tylko do odczytu. Możesz iterować po niej za pomocą właściwości testModule.children, aby zgłosić stan i ewentualne błędy.

Drugi argument to lista nieobsłużonych błędów tylko do odczytu, których Vitest nie był w stanie przypisać do żadnego testu. Mogą one wystąpić poza uruchomieniem testu z powodu błędu w wtyczce lub wewnątrz uruchomienia testu jako efekt uboczny funkcji, której wynik nie był oczekiwany (na przykład przekroczenie czasu, które zgłosiło błąd po zakończeniu testu).

Trzeci argument wskazuje, dlaczego uruchomienie testu zostało zakończone:

  • passed: uruchomienie testu zakończyło się normalnie i nie ma błędów
  • failed: uruchomienie testu ma co najmniej jeden błąd (z powodu błędu składni podczas zbierania lub rzeczywistego błędu podczas wykonywania testu)
  • interrupted: test został przerwany przez wywołanie vitest.cancelCurrentRun lub naciśnięto Ctrl+C w terminalu (należy pamiętać, że w tym przypadku nadal możliwe jest wystąpienie testów zakończonych niepowodzeniem)

Jeśli Vitest nie znalazł żadnych plików testowych do uruchomienia, to zdarzenie zostanie wywołane z pustymi tablicami modułów i błędów, a stan będzie zależał od wartości config.passWithNoTests.

Przykład
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, 'succeeded'));
    } else if (reason === 'failed') {
      // Należy pamiętać, że to pominie możliwe błędy w zestawach.
      // Możesz je uzyskać z testSuite.errors().
      for (const testCase of testModules.children.allTests()) {
        if (testCase.result().state === 'failed') {
          console.log(
            testCase.fullName,
            'in',
            testCase.module.moduleId,
            'failed'
          );
          console.log(testCase.result().errors);
        }
      }
    } else {
      console.log('test run was interrupted, skipping report');
    }
  }
}

export default new MyReporter();

UWAGA O DEPREKACJI

Ta metoda została dodana w Vitest 3, zastępując onFinished, która jest teraz przestarzała.

onCoverage ​

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

Ten zaczep jest wywoływany po przetworzeniu wyników pokrycia. Reportery dostawcy pokrycia są wywoływane po tym zaczepie. Typowanie coverage zależy od coverage.provider. Dla domyślnych wbudowanych dostawców Vitest możesz zaimportować typy z pakietu istanbul-lib-coverage:

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

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

Jeśli Vitest nie wykonał żadnego pokrycia, ten zaczep nie jest wywoływany.

onTestModuleQueued ​

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

Ta metoda jest wywoływana tuż przed zaimportowaniem przez Vitest pliku konfiguracyjnego i samego modułu testowego. Oznacza to, że testModule nie będzie jeszcze miał żadnych children, ale możesz zacząć raportować go jako następny test do uruchomienia.

onTestModuleCollected ​

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

Ta metoda jest wywoływana, gdy wszystkie testy w pliku zostały zebrane, co oznacza, że kolekcja testModule.children jest wypełniona, ale testy nie mają jeszcze żadnych wyników.

onTestModuleStart ​

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

Ta metoda jest wywoływana zaraz po onTestModuleCollected, chyba że Vitest działa w trybie zbierania (vitest.collect() lub vitest collect w CLI), w tym przypadku nie zostanie w ogóle wywołana, ponieważ nie ma testów do uruchomienia.

onTestModuleEnd ​

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

Ta metoda jest wywoływana, gdy każdy test w module zakończył działanie. Oznacza to, że każdy test w testModule.children będzie miał test.result(), który nie jest równy pending.

onHookStart ​

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

Ta metoda jest wywoływana, gdy którykolwiek z tych zaczepów rozpoczął działanie:

  • beforeAll
  • afterAll
  • beforeEach
  • afterEach

Jeśli beforeAll lub afterAll są uruchomione, entity będzie albo TestSuite albo TestModule.

Jeśli beforeEach lub afterEach są uruchomione, entity zawsze będzie TestCase.

WARNING

Metoda onHookStart nie zostanie wywołana, jeśli zaczep nie został uruchomiony podczas przebiegu testu.

onHookEnd ​

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

Ta metoda jest wywoływana, gdy którykolwiek z tych zaczepów zakończył działanie:

  • beforeAll
  • afterAll
  • beforeEach
  • afterEach

Jeśli beforeAll lub afterAll zakończyły działanie, entity będzie albo TestSuite albo TestModule.

Jeśli beforeEach lub afterEach zakończyły działanie, entity zawsze będzie TestCase.

WARNING

Metoda onHookEnd nie zostanie wywołana, jeśli zaczep nie został uruchomiony podczas przebiegu testu.

onTestSuiteReady ​

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

Ta metoda jest wywoływana, zanim zestaw zacznie uruchamiać swoje testy. Ta metoda jest również wywoływana, jeśli zestaw został pominięty.

Jeśli plik nie ma żadnych zestawów, ta metoda nie zostanie wywołana. Rozważ użycie onTestModuleStart, aby pokryć ten przypadek użycia.

onTestSuiteResult ​

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

Ta metoda jest wywoływana po zakończeniu uruchamiania testów przez zestaw. Ta metoda jest również wywoływana, jeśli zestaw został pominięty.

Jeśli plik nie ma żadnych zestawów, ta metoda nie zostanie wywołana. Rozważ użycie onTestModuleEnd, aby pokryć ten przypadek użycia.

onTestCaseReady ​

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

Ta metoda jest wywoływana, zanim test zacznie działać lub zostanie pominięty. Należy pamiętać, że zaczepy beforeEach i afterEach są uważane za część testu, ponieważ mogą wpływać na jego wynik.

WARNING

Należy pamiętać, że możliwe jest, aby testCase.result() miał już stan passed lub failed, gdy wywoływana jest onTestCaseReady. Może się to zdarzyć, jeśli test działał zbyt szybko i zarówno onTestCaseReady, jak i onTestCaseResult zostały zaplanowane do uruchomienia w tej samej mikrozadaniu.

onTestCaseResult ​

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

Ta metoda jest wywoływana, gdy test zakończył działanie lub został po prostu pominięty. Należy pamiętać, że zostanie to wywołane po zakończeniu zaczepu afterEach, jeśli takie istnieją.

W tym momencie testCase.result() będzie miał stan inny niż pending.

onTestAnnotate 3.2.0+ ​

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

Zaczep onTestAnnotate jest powiązany z metodą context.annotate. Gdy annotate jest wywoływane, Vitest serializuje je i wysyła ten sam załącznik do głównego wątku, gdzie reporter może z nim współdziałać.

Jeśli ścieżka jest określona, Vitest przechowuje ją w osobnym katalogu (skonfigurowanym przez attachmentsDir) i modyfikuje właściwość path, aby się do niej odwoływać.

Pager
Poprzednia stronaAPI modułu uruchamiającego
Następna stronaMetadane zadań

Opublikowano na licencji MIT.

Copyright (c) 2021-Present Vitest Team

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

Opublikowano na licencji MIT.

Copyright (c) 2021-Present Vitest Team