Skip to content
Vitest 1
Main Navigation PrůvodceAPIKonfiguracePokročilý
1.6.1
0.34.6

čeština

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

čeština

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

Vzhled

Sidebar Navigation

Pokročilý

Node API

Test Runner (Spouštěč testů)

Metadata úloh

Rozšíření reportérů

Vlastní pool

Na této stránce

Metadata úloh ​

WARNING

Vitest zpřístupňuje experimentální privátní API. Změny, které způsobují nekompatibilitu, nemusí dodržovat sémantické verzování (semver). Proto při jeho používání doporučujeme pevně stanovit verzi Vitest.

Pokud vyvíjíte vlastní reportér nebo používáte Vitest Node.js API, může být užitečné předávat data z úloh spouštěných v různých kontextech do vašeho reportéru nebo vlastního handleru Vitest.

Pro tento účel nelze použít testovací kontext, protože jej nelze serializovat. Nicméně, Vitest umožňuje využít vlastnost meta, která je dostupná pro každou úlohu (sadu nebo test), ke sdílení dat mezi testy a procesem Node.js. Důležité je, že tato komunikace je jednosměrná. Vlastnost meta lze upravit pouze z testovacího kontextu. Změny provedené v Node.js kontextu se v testech neprojeví.

Vlastnost meta můžete naplnit v testovacím kontextu nebo v hookách beforeAll a afterAll pro sadu úloh.

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

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

Po dokončení testu Vitest odešle úlohu, včetně výsledku a metadat (meta), do procesu Node.js pomocí RPC. Pro zachycení a zpracování této úlohy můžete využít metodu onTaskUpdate, která je dostupná ve vaší implementaci reportéru:

ts
// custom-reporter.js
export default {
  // můžete zachytávat balíčky, pokud je to nutné
  onTaskUpdate(packs) {
    const [id, result, meta] = packs[0]
  },
  // meta se nachází u každé úlohy uvnitř "onFinished"
  onFinished(files) {
    files[0].meta.done === true
    files[0].tasks[0].meta.custom === 'some-custom-handler'
  }
}

WARNING

Vitest může odeslat několik úloh současně, pokud je dokončeno více testů v krátkém časovém úseku.

POZOR

Vitest používá různé metody pro komunikaci s procesem Node.js.

  • Pokud Vitest spouští testy uvnitř pracovních vláken (worker threads), data se odesílají přes message port.
  • Pokud Vitest používá child process, data se odesílají jako serializovaný Buffer přes process.send API.
  • Pokud Vitest spouští testy v prohlížeči, data se serializují pomocí balíčku flatted.

Obecně platí, že můžete odeslat téměř cokoliv kromě funkcí, Promises a regexp ( v8.stringify je neumí serializovat, ale můžete odeslat jejich řetězcovou reprezentaci a tu parsovat v Node.js procesu) a dalších neserializovatelných dat. Cyklické reference jsou povoleny.

Také se ujistěte, že serializujete vlastnosti Error objektu předtím, než je nastavíte.

Tyto informace můžete také získat ze stavu Vitest po dokončení testů:

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'

V TypeScriptu je také možné rozšířit definice typů:

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean
    custom?: string
  }
}
Pager
Předchozí stránkaTest Runner (Spouštěč testů)
Další stránkaRozšíření reportérů

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors

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

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors