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

Introducción

Por qué Vitest

Primeros pasos

Características

Configuración de Vitest

API

Referencia de la API de prueba

Funciones de Simulación

Vi

expect

expectTypeOf

assert

assertType

Guía

Interfaz de línea de comandos

Filtrado de Tests

Proyectos de prueba

Reportes

Cobertura

Instantáneas

Simulación (Mocking)

Paralelismo

Pruebas de Tipado

Interfaz de usuario de Vitest

Pruebas en el código fuente

Contexto de prueba

Anotaciones de prueba

Entorno de pruebas

Extender Matchers

Integraciones con IDE

Depuración

Errores comunes

Guía de migración

Migración a Vitest 3.0

Migración desde Jest

Rendimiento

Perfilado del rendimiento de las pruebas

Mejorando el Rendimiento

Modo Navegador

API Avanzadas

Comparaciones con otros ejecutores de pruebas

En esta página

Proyectos de prueba ​

Proyecto de ejemplo

GitHub - Probar en línea

WARNING

Esta característica también se conoce como workspace. El workspace está obsoleto desde la versión 3.2 y ha sido reemplazado por la configuración projects. Funcionalmente son equivalentes.

Vitest permite definir múltiples configuraciones de proyecto dentro de un único proceso de Vitest. Esta característica es particularmente útil para configuraciones de monorepositorios, pero también puede usarse para ejecutar pruebas con diferentes configuraciones, como resolve.alias, plugins o test.browser, entre otras.

Definición de proyectos ​

Puedes definir proyectos en tu configuración raíz:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: ['packages/*'],
  },
});

Las configuraciones de proyecto pueden ser configuraciones en línea, archivos o patrones glob que hacen referencia a tus proyectos. Por ejemplo, si tienes una carpeta llamada packages que contiene tus proyectos, puedes definir un array en tu configuración raíz de Vitest:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: ['packages/*'],
  },
});

Vitest tratará cada carpeta en packages como un proyecto separado, incluso si no contiene un archivo de configuración. Si este patrón glob coincide con cualquier archivo, se considerará una configuración de Vitest, incluso si no tiene vitest en su nombre o tiene una extensión de archivo poco común.

WARNING

Vitest no trata el archivo vitest.config raíz como un proyecto a menos que se especifique explícitamente en la configuración. En consecuencia, la configuración raíz solo influirá en opciones globales como reporters y coverage. Ten en cuenta que Vitest siempre ejecutará ciertos ganchos (hooks) de plugins, como apply, config, configResolved o configureServer, especificados en el archivo de configuración raíz. Vitest también utiliza los mismos plugins para ejecutar configuraciones de inicialización global y proveedores personalizados de cobertura.

También puedes hacer referencia a proyectos mediante sus archivos de configuración:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: ['packages/*/vitest.config.{e2e,unit}.ts'],
  },
});

Este patrón solo incluirá proyectos con un archivo vitest.config que contenga e2e o unit en su nombre antes de la extensión.

También puedes definir proyectos usando configuración en línea. La configuración admite ambas sintaxis al mismo tiempo.

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: [
      // abarca cada carpeta y archivo dentro de la carpeta `packages`
      'packages/*',
      {
        // agrega "extends: true" para heredar las opciones de la configuración raíz
        extends: true,
        test: {
          include: ['tests/**/*.{browser}.test.{ts,js}'],
          // se recomienda definir un nombre al usar configuraciones en línea
          name: 'happy-dom',
          environment: 'happy-dom',
        },
      },
      {
        test: {
          include: ['tests/**/*.{node}.test.{ts,js}'],
          // el color de la etiqueta de nombre se puede cambiar
          name: { label: 'node', color: 'green' },
          environment: 'node',
        },
      },
    ],
  },
});

WARNING

Todos los proyectos deben tener nombres únicos; de lo contrario, Vitest generará un error. Si no se proporciona un nombre en la configuración en línea, Vitest asignará un número. Para las configuraciones de proyecto definidas con sintaxis glob, Vitest por defecto utilizará la propiedad "name" en el archivo package.json más cercano o, si no existe, el nombre de la carpeta.

Los proyectos no admiten todas las propiedades de configuración. Para una mejor seguridad de tipos, usa el método defineProject en lugar de defineConfig dentro de los archivos de configuración del proyecto:

ts
// @errors: 2769
import { defineProject } from 'vitest/config';

export default defineProject({
  test: {
    environment: 'jsdom',
    // "reporters" no es compatible con la configuración de un proyecto,
    // por lo que generará un error
    reporters: ['json'],
  },
});

Ejecución de pruebas ​

Para ejecutar pruebas, define un script en tu package.json raíz:

json
{
  "scripts": {
    "test": "vitest"
  }
}

Ahora las pruebas se pueden ejecutar a través de tu gestor de paquetes:

bash
npm run test
bash
yarn test
bash
pnpm run test
bash
bun run test

Si necesitas ejecutar pruebas solo dentro de un único proyecto, usa la opción CLI --project:

bash
npm run test --project e2e
bash
yarn test --project e2e
bash
pnpm run test --project e2e
bash
bun run test --project e2e

TIP

La opción CLI --project se puede usar varias veces para seleccionar múltiples proyectos:

bash
npm run test --project e2e --project unit
bash
yarn test --project e2e --project unit
bash
pnpm run test --project e2e --project unit
bash
bun run test --project e2e --project unit

Configuración ​

Ninguna de las opciones de configuración se hereda del archivo de configuración raíz por defecto. Puedes crear un archivo de configuración compartido y fusionarlo con la configuración del proyecto:

ts
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';

export default mergeConfig(
  configShared,
  defineProject({
    test: {
      environment: 'jsdom',
    },
  })
);

Además, puedes usar la opción extends para heredar de tu configuración de nivel raíz. Todas las opciones se combinarán.

ts
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  test: {
    pool: 'threads',
    projects: [
      {
        // heredará opciones de esta configuración, como los plugins y el pool
        extends: true,
        test: {
          name: 'unit',
          include: ['**/*.unit.test.ts'],
        },
      },
      {
        // no heredará ninguna opción de esta configuración; este es el comportamiento predeterminado
        extends: false,
        test: {
          name: 'integration',
          include: ['**/*.integration.test.ts'],
        },
      },
    ],
  },
});

Opciones no compatibles

Algunas de las opciones de configuración no están permitidas en la configuración de proyectos. Cabe destacar las siguientes:

  • coverage: la cobertura se aplica a todo el proceso
  • reporters: solo se admiten los reporters de nivel raíz
  • resolveSnapshotPath: solo se respeta el resolvedor de nivel raíz
  • todas las demás opciones que no afectan a los ejecutores de pruebas

Todas las opciones de configuración que no son compatibles dentro de la configuración de un proyecto se indican con el signo * en la guía de "Configuración". Deben definirse una única vez en el archivo de configuración raíz.

Pager
AnteriorFiltrado de Tests
SiguienteReportes

Publicado bajo la licencia MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/guide/projects

Publicado bajo la licencia MIT.

Copyright (c) 2021-Present Vitest Team