Skip to content
Vitest 3
Main Navigation Průvodce & APIKonfiguraceRežim prohlížečePokročilé API
3.2.0
2.1.9
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

API

Node API

Rozšířené API

Vitest API

TestProject

TestSpecification

Test Task API

TestCase

TestSuite

TestModule

TestCollection

Plugin API

Runner API

Reportéry

Metadata úloh

Průvodce

Spouštění testů

Rozšíření reportérů

Vlastní pool

Konfigurace Vitestu

Testovací reference API

Na této stránce

Metadata úloh ​

WARNING

Vitest zpřístupňuje experimentální soukromé API. Změny, které porušují zpětnou kompatibilitu, nemusí být v souladu se SemVer, proto prosím při jeho používání zafixujte verzi Vitestu.

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 testů, které se spouštějí v různých kontextech, vašemu reportéru nebo vlastnímu handleru.

K dosažení tohoto cíle se nelze spoléhat na kontext testu, protože jej nelze serializovat. S Vitestem však můžete využít vlastnost meta dostupnou u každé úlohy (sady nebo testu) ke sdílení dat mezi vašimi testy a procesem Node.js. Je důležité si uvědomit, že tato komunikace je pouze jednosměrná, protože vlastnost meta lze upravovat pouze v kontextu testu. Jakékoli změny provedené v kontextu Node.js nebudou ve vašich testech viditelné.

Vlastnost meta můžete vyplnit v kontextu testu nebo uvnitř hooků beforeAll/afterAll pro úlohy sady.

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

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

Jakmile je test dokončen, Vitest odešle úlohu včetně výsledku a meta do procesu Node.js pomocí RPC a poté ji nahlásí v onTestCaseResult a dalších hookách, které mají přístup k úlohám. Pro zpracování tohoto testovacího případu můžete využít metodu onTestCaseResult, která je dostupná ve vaší implementaci reportéru:

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;

POZOR

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

  • Pokud Vitest spouští testy uvnitř worker threadů, odešle data přes message port.
  • Pokud Vitest používá child proces, data budou odeslána jako serializovaný Buffer přes process.send API.
  • Pokud Vitest spouští testy v prohlížeči, data budou serializována do řetězce pomocí balíčku flatted.

Tato vlastnost je také dostupná u každého testu v json reportéru, takže se ujistěte, že data mohou být serializována do JSON.

Také se ujistěte, že serializujete vlastnosti Error před jejich nastavením.

Tyto informace můžete také získat ze stavu Vitestu po dokončení běhu testů:

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

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

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean;
    custom?: string;
  }
}
Pager
Předchozí stránkaReportéry
Další stránkaSpouštění testů

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/metadata

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team