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 test
yarn test
pnpm run test
bun test
Si necesita ejecutar pruebas solo dentro de un único proyecto, use la opción CLI --project
:
npm run test --project e2e
yarn test --project e2e
pnpm run test --project e2e
bun test --project e2e
TIP
La opción CLI --project
se puede usar varias veces para filtrar múltiples proyectos:
npm run test --project e2e --project unit
yarn test --project e2e --project unit
pnpm run test --project e2e --project unit
bun test --project e2e --project unit
Configuració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".