Skip to content
Vitest 1
Main Navigation PrzewodnikAPIKonfiguracjaZaawansowany
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

Zaawansowany

Node API

Test Runner

Metadane Zadań

Rozszerzanie reporterów

Niestandardowa Pula

Na tej stronie

Metadane Zadań ​

WARNING

Vitest udostępnia eksperymentalne, prywatne API. Zmiany powodujące niezgodność wsteczną mogą nie być zgodne z zasadami semver, dlatego zaleca się przypisanie konkretnej wersji Vitest podczas korzystania z tego API.

Jeśli tworzysz niestandardowy reporter lub korzystasz z API Vitest Node.js, przydatne może być przekazywanie danych z testów (wykonywanych w różnych kontekstach) do reportera lub niestandardowego handlera Vitest.

Aby to osiągnąć, nie można polegać na kontekście testu, ponieważ nie podlega on serializacji. Vitest umożliwia jednak użycie właściwości meta dostępnej dla każdego zadania (suite lub test), aby udostępniać dane między testami a procesem Node.js. Należy pamiętać, że komunikacja ta jest jednokierunkowa, ponieważ właściwość meta może być modyfikowana tylko z poziomu kontekstu testowego. Zmiany w kontekście Node.js nie będą odzwierciedlone w testach.

Możesz wypełnić właściwość meta w kontekście testowym lub w hookach beforeAll/afterAll dla zadań suite.

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

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

Po zakończeniu testu Vitest wysyła do procesu Node.js zadanie zawierające wynik i metadane (meta) za pośrednictwem RPC. Aby przechwycić i przetworzyć zadanie, możesz użyć metody onTaskUpdate dostępnej w implementacji reportera:

ts
// custom-reporter.js
export default {
  // można przechwytywać pakiety w razie potrzeby
  onTaskUpdate(packs) {
    const [id, result, meta] = packs[0]
  },
  // meta znajduje się w każdym zadaniu wewnątrz "onFinished"
  onFinished(files) {
    files[0].meta.done === true
    files[0].tasks[0].meta.custom === 'some-custom-handler'
  }
}

WARNING

Vitest może wysyłać kilka zadań jednocześnie, jeśli wiele testów zostanie ukończonych w krótkim czasie.

BEWARE

Vitest używa różnych metod do komunikacji z procesem Node.js.

  • Jeśli Vitest uruchamia testy w wątkach roboczych, dane zostaną wysłane przez port wiadomości.
  • Jeśli Vitest używa procesu potomnego, dane zostaną wysłane jako zserializowany Buffer za pośrednictwem API process.send.
  • Jeśli Vitest uruchamia testy w przeglądarce, dane zostaną zserializowane do postaci ciągu znaków (stringified) za pomocą pakietu flatted.

Ogólnie rzecz biorąc, można przesyłać niemal wszystkie typy danych. Wyjątkiem są funkcje, obiekty Promise, wyrażenia regularne (RegExp) (których v8.stringify nie potrafi serializować – można jednak przesłać ich tekstową reprezentację i zinterpretować ją samodzielnie w procesie Node.js) oraz inne dane, które nie podlegają serializacji. Dozwolone są natomiast referencje cykliczne.

Należy również upewnić się, że właściwości błędów (Error) są serializowane przed ustawieniem.

Informacje te można również uzyskać ze stanu Vitest po zakończeniu testów:

ts
const vitest = await createVitest('test')
await vitest.start()
vitest.state.getFiles()[0].meta.done === true
vitest.state.getFiles()[0].tasks[0].meta.custom === 'some-custom-handler'

Podczas korzystania z TypeScript możliwe jest również rozszerzenie definicji typów:

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean
    custom?: string
  }
}
Pager
Poprzednia stronaTest Runner
Następna stronaRozszerzanie reporterów

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/advanced/metadata

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors