Skip to content
Vitest 2
Main Navigation GuíaAPIConfiguraciónModo NavegadorAvanzado
2.1.9
1.6.1
0.34.6

Español

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

Español

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

Apariencia

Sidebar Navigation

API de Node

Ejecutor de Pruebas (Test Runner)

Metadatos de la tarea

Extensión de los Reportadores

Pool personalizado

En esta página

Metadatos de la tarea ​

WARNING

Vitest expone una API privada experimental. Los cambios importantes podrían no seguir SEMVER, por favor, fija la versión de Vitest cuando la uses.

Si estás desarrollando un reportero personalizado o utilizando la API de Vitest Node.js, podría ser útil pasar datos. Estos datos provendrían de las pruebas que se están ejecutando en varios contextos y se enviarían a tu reportero o manejador personalizado de Vitest.

Para lograrlo, depender del contexto de prueba no es viable ya que no puede serializarse. Sin embargo, con Vitest, puedes utilizar la propiedad meta disponible en cada tarea (suite o prueba) para compartir datos entre tus pruebas y el proceso de Node.js. Es importante tener en cuenta que esta comunicación es unidireccional, ya que la propiedad meta solo se puede modificar desde dentro del contexto de la prueba. Cualquier cambio realizado dentro del contexto de Node.js no será visible en tus pruebas.

Puedes rellenar la propiedad meta en el contexto de la prueba o dentro de los hooks beforeAll/afterAll para las tareas de la suite.

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

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

Cuando una prueba se completa, Vitest enviará una tarea al proceso de Node.js utilizando RPC. Esta tarea incluye tanto el resultado como la propiedad meta. Para interceptar y procesar esta tarea, puedes utilizar el método onTaskUpdate disponible en tu implementación de reportero:

ts
// custom-reporter.js
export default {
  // puedes interceptar packs si es necesario
  onTaskUpdate(packs) {
    const [id, result, meta] = packs[0]
  },
  // meta se encuentra en cada tarea dentro de "onFinished"
  onFinished(files) {
    files[0].meta.done === true
    files[0].tasks[0].meta.custom === 'some-custom-handler'
  }
}

WARNING

Vitest puede enviar varias tareas al mismo tiempo si varias pruebas se completan en un corto período de tiempo.

BEWARE

Vitest utiliza diferentes métodos para comunicarse con el proceso de Node.js.

  • Si Vitest ejecuta pruebas dentro de hilos de trabajo (worker threads), enviará datos a través de message port
  • Si Vitest utiliza un proceso hijo, los datos se enviarán como un Buffer serializado a través de la API process.send
  • Si Vitest ejecuta pruebas en el navegador, los datos se serializarán como una cadena utilizando el paquete flatted

Esta propiedad también está presente en cada prueba en el reportero json, así que asegúrese de que los datos se puedan serializar en JSON.

Además, asegúrate de serializar las propiedades de Error antes de establecerlas.

También puedes obtener esta información del estado de Vitest cuando finaliza la ejecución de las pruebas:

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'

También se pueden extender las definiciones de tipo al usar TypeScript:

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean
    custom?: string
  }
}
Pager
AnteriorEjecutor de Pruebas (Test Runner)
SiguienteExtensión de los Reportadores

Publicado bajo la licencia MIT.

Copyright (c) 2024 Mithril Contributors

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

Publicado bajo la licencia MIT.

Copyright (c) 2024 Mithril Contributors