Espacio de trabajo
Vitest proporciona soporte integrado para monorepositorios a través de un archivo de configuración de área de trabajo. Puedes crear un área de trabajo para definir la configuración de tus proyectos.
Definiendo un área de trabajo
Un área de trabajo debe tener un archivo vitest.workspace
o vitest.projects
en la raíz (en la misma carpeta que tu archivo de configuración, si tienes uno). Vitest soporta las extensiones ts
, js
y json
para este archivo.
El archivo de configuración del área de trabajo debe tener una exportación predeterminada con una lista de archivos o patrones globales (glob patterns) que hagan referencia a tus proyectos. Por ejemplo, si tienes una carpeta llamada packages
que contiene tus proyectos, puedes definir un área de trabajo con este archivo de configuración:
export default ['packages/*'];
Vitest considerará cada carpeta dentro de packages
como un proyecto separado, incluso si no tiene un archivo de configuración dentro de ella.
WARNING
Vitest no considerará la configuración raíz como un proyecto de área de trabajo (por lo que no ejecutará las pruebas especificadas en include
) a menos que se especifique explícitamente en esta configuración.
También puedes referenciar 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
cuyo nombre incluya e2e
o unit
antes de la extensión.
WARNING
Si estás referenciando nombres de archivos con un patrón global, asegúrate de que tu archivo de configuración comience con vite.config
o vitest.config
. De lo contrario, Vitest lo ignorará.
También puedes definir proyectos con configuración en línea. El archivo de área de trabajo admite ambas sintaxis simultáneamente.
import { defineWorkspace } from 'vitest/config';
// defineWorkspace proporciona una buena experiencia para desarrolladores (DX) con sugerencias de tipo
export default defineWorkspace([
'packages/*',
{
// agrega "extends" para combinar dos configuraciones
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// se recomienda asignar un nombre cuando se utilizan 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 proporcionas un nombre dentro de la configuración en línea, Vitest asignará un número automáticamente. Si no proporcionas un nombre dentro de una configuración de proyecto definida con la sintaxis glob, Vitest utilizará el nombre del directorio de forma predeterminada.
Si no necesitas configuraciones en línea, puedes simplemente crear un pequeño archivo JSON en tu directorio raíz:
["packages/*"]
Los proyectos de área de trabajo no admiten todas las propiedades de configuración. Para mayor seguridad de tipos, utiliza el método defineProject
en lugar del método defineConfig
dentro de los archivos de configuración del proyecto:
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters" no es compatible con una configuración de proyecto,
// por lo que mostrará un error
reporters: ['json'],
},
});
Configuración
Ninguna de las opciones de configuración se hereda del archivo de configuración de nivel superior. Puedes crear un archivo de configuración compartido y fusionarlo con la configuración del proyecto manualmente:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
Además, algunas de las opciones de configuración no están permitidas en una configuración de proyecto. Las más notables son:
coverage
: la cobertura se realiza para todo el área de trabajoreporters
: solo se admiten los reporters de nivel raízresolveSnapshotPath
: solo se respeta el resolver 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 una configuración de proyecto tienen el signo * junto a ellas en la página "Config".
Cobertura
La cobertura para los proyectos de área de trabajo funciona automáticamente. Pero si tienes la opción all
habilitada y utilizas extensiones no convencionales en algunos de tus proyectos, necesitarás tener un plugin que maneje esta extensión en tu archivo de configuración raíz.
Por ejemplo, si tienes un paquete que utiliza archivos Vue y tiene su propio archivo de configuración, pero algunos archivos no se importan en las pruebas, la cobertura fallará al analizar el uso de archivos sin usar. Esto se debe a que la cobertura se basa en la configuración raíz, no en la del proyecto.