Espacio de trabajo
Proyecto de ejemplo
Vitest ofrece la posibilidad de definir múltiples configuraciones de proyecto dentro de un único proceso de Vitest. Esta característica es especialmente útil para configuraciones de monorepos, pero también puede emplearse para ejecutar pruebas con distintas configuraciones, como resolve.alias, plugins o test.browser, entre otras.
Definición de un espacio de trabajo
Un espacio de trabajo debe incluir un archivo vitest.workspace o vitest.projects en su directorio raíz (ubicado en la misma carpeta que su archivo de configuración raíz o directorio de trabajo, si este último no existe). Vitest admite las extensiones ts, js y json para este archivo.
CONVENCIÓN DE NOMBRES
Tenga en cuenta que esta característica se denomina workspace, no workspaces (sin "s" al final).
El archivo de configuración del espacio de trabajo debe tener una exportación predeterminada con una lista de archivos o patrones glob que hagan referencia a sus proyectos. Por ejemplo, si tiene una carpeta llamada packages que contiene sus proyectos, puede definir un espacio de trabajo con este archivo de configuración:
export default ['packages/*'];Vitest tratará cada carpeta en packages como un proyecto separado, incluso si no contiene un archivo de configuración propio. A partir de Vitest 2.1, si este patrón glob coincide con algún archivo, se considerará una configuración de Vitest, aunque no incluya vitest en su nombre.
WARNING
Vitest no considera el archivo vitest.config raíz como un proyecto de espacio de trabajo a menos que se especifique explícitamente en la configuración del espacio de trabajo. En consecuencia, la configuración raíz solo influirá en opciones globales como reporters y coverage.
También puede hacer referencia a proyectos mediante sus archivos de configuración:
export default ['packages/*/vitest.config.{e2e,unit}.ts'];Este patrón solo incluirá proyectos con un archivo vitest.config que contenga e2e o unit antes de la extensión.
También es posible definir proyectos utilizando configuración en línea. El archivo del espacio de trabajo admite ambas sintaxis simultáneamente.
import { defineWorkspace } from 'vitest/config';
// defineWorkspace ofrece una mejor experiencia de desarrollador (DX) con sugerencias de tipos
export default defineWorkspace([
// incluye cada carpeta y archivo dentro de la carpeta `packages`
'packages/*',
{
// usa "extends" para fusionar dos configuraciones
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// se recomienda especificar un nombre cuando se usan configuraciones en línea
name: 'happy-dom',
environment: 'happy-dom',
},
},
{
test: {
include: ['tests/**/*.{node}.test.{ts,js}'],
name: 'node',
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 de comodín, Vitest utilizará por defecto la propiedad "name" del archivo package.json más cercano o, si no existe, el nombre de la carpeta.
Si no utiliza configuraciones en línea, puede crear un pequeño archivo JSON en su directorio raíz:
["packages/*"]Los proyectos del espacio de trabajo no admiten todas las propiedades de configuración. Para una mejor seguridad de tipos, utilice el método defineProject en lugar de defineConfig dentro de los archivos de configuración del proyecto:
// @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 dentro del espacio de trabajo, defina un script en su package.json raíz:
{
"scripts": {
"test": "vitest"
}
}Ahora las pruebas pueden ejecutarse usando su gestor de paquetes:
npm run testyarn testpnpm run testbun testSi necesita ejecutar pruebas solo dentro de un único proyecto, use la opción CLI --project:
npm run test --project e2eyarn test --project e2epnpm run test --project e2ebun test --project e2eTIP
La opción CLI --project se puede usar varias veces para filtrar múltiples proyectos:
npm run test --project e2e --project unityarn test --project e2e --project unitpnpm run test --project e2e --project unitbun test --project e2e --project unitConfiguración
Ninguna de las opciones de configuración se hereda del archivo de configuración de nivel raíz. Puede crear un archivo de configuración compartido y fusionarlo con la configuración del proyecto por su cuenta:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);A nivel de defineWorkspace, puede usar la opción extends para heredar de su configuración raíz. Todas las opciones se combinarán.
import { defineWorkspace } from 'vitest/config';
export default defineWorkspace([
{
extends: './vitest.config.ts',
test: {
name: 'unit',
include: ['**/*.unit.test.ts'],
},
},
{
extends: './vitest.config.ts',
test: {
name: 'integration',
include: ['**/*.integration.test.ts'],
},
},
]);Algunas de las opciones de configuración no están permitidas en la configuración de un proyecto. Entre las más relevantes:
coverage: la cobertura se realiza para todo el espacio de trabajoreporters: solo se permiten los reporteros de nivel raízresolveSnapshotPath: solo se aplica el resolvedor de nivel raíz- todas las demás opciones que no afectan a los ejecutores de pruebas
TIP
Todas las opciones de configuración que no son compatibles dentro de la configuración de un proyecto están marcadas con un icono * en la guía "Config".