Skip to content
Vitest 3
Main Navigation Guide & APIConfigurationMode NavigateurAPI avancée
3.2.0
2.1.9
1.6.1
0.34.6

Français

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

Français

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

Apparence

Sidebar Navigation

API

Node API

API avancée

API Vitest

TestProject

TestSpecification

Test Task API

TestCase

TestSuite

TestModule

TestCollection

API des plugins

API du Runner

Rapporteurs

Métadonnées de tâche

Guide

Exécuter les tests

Extension des Rapporteurs

Pool personnalisé

Configuration de Vitest

Référence de l'API des Tests

Sur cette page

Métadonnées de tâche ​

WARNING

Vitest expose une API privée expérimentale. Les changements majeurs peuvent ne pas respecter SemVer. Il est recommandé d'épingler la version de Vitest lorsque vous utilisez cette API.

Si vous développez un générateur de rapports personnalisé ou utilisez l'API Node.js de Vitest, il peut être utile de transmettre des données des tests exécutés dans différents contextes à votre générateur de rapports ou à votre gestionnaire Vitest personnalisé.

Pour ce faire, s'appuyer sur le contexte de test n'est pas possible car il ne peut pas être sérialisé. Cependant, avec Vitest, vous pouvez utiliser la propriété meta disponible sur chaque tâche (suite ou test) pour partager des données entre vos tests et le processus Node.js. Il est important de noter que cette communication est à sens unique : la propriété meta ne peut être modifiée que depuis le contexte de test. Toute modification effectuée dans le contexte Node.js ne sera pas visible dans vos tests.

Vous pouvez définir la propriété meta sur le contexte de test ou à l'intérieur des hooks beforeAll/afterAll pour les tâches de suite.

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

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

Une fois qu'un test est terminé, Vitest enverra une tâche incluant le résultat et meta au processus Node.js via RPC. Ces informations seront ensuite signalées dans onTestCaseResult et d'autres hooks ayant accès aux tâches. Pour traiter ce cas de test, vous pouvez utiliser la méthode onTestCaseResult disponible dans votre implémentation de générateur de rapports :

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;

ATTENTION

Vitest utilise différentes méthodes pour communiquer avec le processus Node.js :

  • Si Vitest exécute des tests dans des threads d'exécution (worker threads), les données seront envoyées via un port de message.
  • Si Vitest utilise un processus enfant, les données seront envoyées sous forme de buffer sérialisé via l'API process.send.
  • Si Vitest exécute des tests dans le navigateur, les données seront sérialisées à l'aide du package flatted.

Cette propriété est également présente sur chaque test dans le générateur de rapports json. Assurez-vous que les données peuvent être sérialisées en JSON.

Pensez également à sérialiser les propriétés d'erreur avant de les définir.

Vous pouvez également obtenir ces informations à partir de l'état de Vitest une fois les tests terminés :

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

Il est également possible d'étendre les définitions de type lors de l'utilisation de TypeScript :

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean;
    custom?: string;
  }
}
Pager
Page précédenteRapporteurs
Page suivanteExécuter les tests

Publié sous la licence MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/metadata

Publié sous la licence MIT.

Copyright (c) 2021-Present Vitest Team