Skip to content
Vitest 2
Main Navigation GuideAPIConfigurationMode NavigateurAvancé
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.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.

Cette propriété est également présente dans chaque test du rapporteur json, assurez-vous donc que les données peuvent être sérialisées au format JSON.

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://v2.vitest.dev/advanced/metadata

Publié sous la licence MIT.

Copyright (c) 2024 Mithril Contributors