Skip to content
Vitest 1
Main Navigation GuíaAPIConfiguraciónAvanzado
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

Avanzado

API de Node

Ejecutor de Pruebas (Test Runner)

Metadatos de la tarea

Extensión de los Reportadores

Pool personalizado

En esta página

Ejecutor de Pruebas (Test Runner) ​

WARNING

Esta es una API avanzada. Si solo estás ejecutando pruebas, probablemente no necesites esto. Se utiliza principalmente por autores de bibliotecas.

Puedes especificar la ruta a tu ejecutor de pruebas con la opción runner en tu archivo de configuración. Este archivo debe tener una exportación por defecto con una clase que implemente los siguientes métodos:

ts
export interface VitestRunner {
  /**
   * Se invoca primero, antes de recopilar y ejecutar las pruebas.
   */
  onBeforeCollect?: (paths: string[]) => unknown;
  /**
   * Se llama después de recopilar las pruebas y antes de "onBeforeRun".
   */
  onCollected?: (files: File[]) => unknown;

  /**
   * Se invoca cuando el ejecutor de pruebas debe cancelar las próximas ejecuciones.
   * El ejecutor debe estar atento a este método y marcar las pruebas y suites como omitidas en
   * "onBeforeRunSuite" y "onBeforeRunTask" cuando se le llama.
   */
  onCancel?: (reason: CancelReason) => unknown;

  /**
   * Se invoca antes de ejecutar una prueba individual. Aún no tiene un "resultado".
   */
  onBeforeRunTask?: (test: TaskPopulated) => unknown;
  /**
   * Se invoca antes de ejecutar la función de prueba propiamente dicha. Ya tiene un "resultado" con "estado" y "horaDeInicio".
   */
  onBeforeTryTask?: (
    test: TaskPopulated,
    options: { retry: number; repeats: number }
  ) => unknown;
  /**
   * Se llama después de establecer el resultado y el estado.
   */
  onAfterRunTask?: (test: TaskPopulated) => unknown;
  /**
   * Se invoca inmediatamente después de ejecutar la función de prueba. Aún no tiene un estado actualizado. No se llamará si la función de prueba lanza un error.
   */
  onAfterTryTask?: (
    test: TaskPopulated,
    options: { retry: number; repeats: number }
  ) => unknown;

  /**
   * Se llama antes de ejecutar una sola suite. Aún no tiene "result".
   */
  onBeforeRunSuite?: (suite: Suite) => unknown;
  /**
   * Se llama después de ejecutar una sola suite. Tiene estado y resultado.
   */
  onAfterRunSuite?: (suite: Suite) => unknown;

  /**
   * Si se define, se llamará en lugar de la partición y el manejo habituales de la suite de Vitest.
   * Los hooks 'before' y 'after' no se ignorarán.
   */
  runSuite?: (suite: Suite) => Promise<void>;
  /**
   * Si se define, se llamará en lugar del manejo habitual de Vitest. Útil si tienes tu propia función de prueba personalizada.
   * Los hooks 'before' y 'after' no se ignorarán.
   */
  runTask?: (test: TaskPopulated) => Promise<void>;

  /**
   * Se llama cuando se actualiza una tarea. Es lo mismo que "onTaskUpdate" en un reportero, pero esto se ejecuta en el mismo hilo que las pruebas.
   */
  onTaskUpdate?: (task: [string, TaskResult | undefined][]) => Promise<void>;

  /**
   * Se llama antes de ejecutar todas las pruebas en las rutas recopiladas.
   */
  onBeforeRunFiles?: (files: File[]) => unknown;
  /**
   * Se llama justo después de ejecutar todas las pruebas en las rutas recopiladas.
   */
  onAfterRunFiles?: (files: File[]) => unknown;
  /**
   * Se invoca cuando se define un nuevo contexto para una prueba. Útil si deseas añadir propiedades personalizadas al contexto.
   * Si solo deseas definir un contexto personalizado con un ejecutor, considera usar 'beforeAll' en 'setupFiles' en su lugar.
   *
   * Este método se llama tanto para los controladores "test" como para los "custom".
   *
   * @see https://www.getbook.com/es/book/vitest-1/advanced/runner#your-task-function
   */
  extendTaskContext?: <T extends Test | Custom>(
    context: TaskContext<T>
  ) => TaskContext<T>;
  /**
   * Se invoca cuando se importan ciertos archivos. Se puede llamar en dos situaciones: al recopilar pruebas y al importar archivos de configuración.
   */
  importFile: (filepath: string, source: VitestRunnerImportSource) => unknown;
  /**
   * Configuración de acceso público.
   */
  config: VitestRunnerConfig;
}

Al instanciar esta clase, Vitest pasa su configuración, la cual debes exponer como una propiedad config.

WARNING

Vitest también inyecta una instancia de ViteNodeRunner como propiedad __vitest_executor. Puedes usarla para procesar archivos en el método importFile (este es el comportamiento predeterminado de TestRunner y BenchmarkRunner).

ViteNodeRunner expone el método executeId, que se utiliza para importar archivos de prueba en un entorno compatible con Vite. Es decir, resolverá las importaciones y transformará el contenido del archivo en tiempo real para que Node pueda interpretarlo.

TIP

Para no perder esta funcionalidad, puedes extender tu ejecutor a partir de VitestTestRunner, que se importa desde vitest/runners. También expone BenchmarkNodeRunner, si quieres extender la funcionalidad de benchmark.

Tu función de tarea ​

Puedes extender el sistema de tareas de Vitest con tus propias tareas. Una tarea es un objeto que forma parte de una suite. Se añade automáticamente a la suite actual mediante el método suite.task:

js
// ./utils/custom.js
import { createTaskCollector, getCurrentSuite, setFn } from 'vitest/suite';

export { describe, beforeAll, afterAll } from 'vitest';

// esta función se llamará durante la fase de recolección:
// no llame al controlador de función aquí, agréguelo a las tareas del conjunto de pruebas
// con el método "getCurrentSuite().task()"
// nota: createTaskCollector proporciona soporte para "todo"/"each"/...
export const myCustomTask = createTaskCollector(function (name, fn, timeout) {
  getCurrentSuite().task(name, {
    ...this, // so "todo"/"skip"/... is tracked correctly
    meta: {
      customPropertyToDifferentiateTask: true,
    },
    handler: fn,
    timeout,
  });
});
js
// ./garden/tasks.test.js
import { afterAll, beforeAll, describe, myCustomTask } from '../custom.js';
import { gardener } from './gardener.js';

describe('take care of the garden', () => {
  beforeAll(() => {
    gardener.putWorkingClothes();
  });

  myCustomTask('weed the grass', () => {
    gardener.weedTheGrass();
  });
  myCustomTask.todo('mow the lawn', () => {
    gardener.mowerTheLawn();
  });
  myCustomTask('water flowers', () => {
    gardener.waterFlowers();
  });

  afterAll(() => {
    gardener.goHome();
  });
});
bash
vitest ./garden/tasks.test.js

WARNING

Si no tienes un ejecutor personalizado o no has definido el método runTest, Vitest intentará recuperar una tarea automáticamente. Si no has añadido una función usando setFn, la ejecución fallará.

TIP

El sistema de tareas personalizadas admite hooks y contextos. Si deseas habilitar el encadenamiento de propiedades (como only, skip y las que definas), puedes importar createChainable desde vitest/suite y aplicarlo a tu función. Si optas por esta opción, deberás invocar custom utilizando custom.call(this) si decides hacerlo.

Pager
AnteriorAPI de Node
SiguienteMetadatos de la tarea

Publicado bajo la licencia MIT.

Copyright (c) 2024 Mithril Contributors

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

Publicado bajo la licencia MIT.

Copyright (c) 2024 Mithril Contributors