Skip to content
Vitest 3
Main Navigation Guía & APIConfiguraciónModo NavegadorAPI avanzada
3.2.0
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

Node API

API Avanzadas

API de Vitest

TestProject

TestSpecification

Test Task API

TestCase

TestSuite

TestModule

TestCollection

API de Plugins

API del Runner

Reporteros

Metadatos de Tareas

Guía

Ejecución de Pruebas

Extensión de los Reporters

Pool Personalizado

Configuración de Vitest

Referencia de la API de prueba

En esta página

Metadatos de Tareas ​

WARNING

Vitest expone una API privada experimental. Los cambios importantes podrían no seguir SemVer; por favor, fije la versión de Vitest que está utilizando.

Si está desarrollando un reportero personalizado o utilizando la API de Vitest Node.js, le podría resultar útil pasar datos de las pruebas que se están ejecutando en varios contextos a su reportero o manejador personalizado de Vitest.

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

Puede establecer la propiedad meta en el contexto de prueba o dentro de los hooks beforeAll y afterAll para las tareas de suite.

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

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

Una vez que se completa una prueba, Vitest enviará una tarea que incluye el resultado y meta al proceso de Node.js usando RPC, y luego lo informará en onTestCaseResult y otros hooks que tienen acceso a las tareas. Para procesar este caso de prueba, puede utilizar el método onTestCaseResult disponible en su implementación de reportero:

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;

CUIDADO

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

  • Si Vitest ejecuta pruebas dentro de worker threads, enviará datos a través de un puerto de mensajes
  • Si Vitest utiliza un proceso hijo, los datos se enviarán como un búfer serializado a través de la API process.send
  • Si Vitest ejecuta pruebas en el navegador, los datos se serializarán a cadena usando el paquete flatted

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

Además, asegúrese de serializar las propiedades de Error antes de asignarlas.

También puede obtener esta información del estado de Vitest una vez que las pruebas hayan finalizado su ejecución:

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

También es posible extender las definiciones de tipo al usar TypeScript:

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean;
    custom?: string;
  }
}
Pager
AnteriorReporteros
SiguienteEjecución de Pruebas

Publicado bajo la licencia MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/metadata

Publicado bajo la licencia MIT.

Copyright (c) 2021-Present Vitest Team