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

Avancé

API Node.js

Exécuteur de tests

Métadonnées des tâches

Étendre les reporters

Pool personnalisé

Sur cette page

Métadonnées des tâches ​

WARNING

Vitest fournit une API privée expérimentale. Les changements majeurs peuvent ne pas respecter le versionnage sémantique (semver). Veuillez donc figer la version de Vitest lors de son utilisation.

Si vous développez un rapporteur personnalisé ou utilisez l'API Node.js de Vitest, il peut être utile de transmettre des données des tests en cours d'exécution à votre rapporteur ou à votre gestionnaire Vitest personnalisé.

Pour ce faire, l'utilisation du contexte de test n'est pas appropriée car il ne peut pas être sérialisé. Cependant, Vitest vous permet d'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 unidirectionnelle, car 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 renseigner la propriété meta dans le contexte de test ou à l'intérieur des hooks beforeAll et 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 en utilisant l'appel de procédure distante (RPC). Pour intercepter et traiter cette tâche, vous pouvez utiliser la méthode onTaskUpdate disponible dans l'implémentation de votre rapporteur :

ts
// custom-reporter.js
export default {
  // you can intercept packs if needed
  onTaskUpdate(packs) {
    const [id, result, meta] = packs[0]
  },
  // meta is located on every task inside "onFinished"
  onFinished(files) {
    files[0].meta.done === true
    files[0].tasks[0].meta.custom === 'some-custom-handler'
  }
}

WARNING

Vitest peut envoyer plusieurs tâches simultanément si plusieurs tests se terminent rapidement.

BEWARE

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

  • Si Vitest exécute des tests dans des threads de travail, il enverra les donné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 transformées en chaîne de caractères à l'aide du package flatted.

En règle générale, vous pouvez envoyer presque tout, à l'exception des fonctions, des Promises, des expressions régulières (car v8.stringify ne peut pas les sérialiser, mais vous pouvez envoyer une version chaîne et l'analyser vous-même dans le processus Node.js), et d'autres données non sérialisables. Les références cycliques sont cependant autorisées.

Assurez-vous également de sérialiser les propriétés d'erreur avant de les attribuer.

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

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'

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édenteExécuteur de tests
Page suivanteÉtendre les reporters

Publié sous la licence MIT.

Copyright (c) 2024 Mithril Contributors

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

Publié sous la licence MIT.

Copyright (c) 2024 Mithril Contributors