Spazio di lavoro
Vitest offre supporto integrato per le monorepo tramite un file di configurazione dello spazio di lavoro. Puoi creare uno spazio di lavoro per definire le configurazioni dei tuoi progetti.
Definizione di uno spazio di lavoro
Uno spazio di lavoro deve avere un file vitest.workspace
o vitest.projects
nella sua cartella principale (nella stessa cartella del tuo file di configurazione, se presente). Vitest supporta le estensioni ts
/js
/json
per questo file.
Il file di configurazione dello spazio di lavoro deve avere un'esportazione predefinita contenente un elenco di file o pattern glob che fanno riferimento ai tuoi progetti. Ad esempio, se hai una cartella chiamata packages
contenente i tuoi progetti, puoi definire uno spazio di lavoro con questo file di configurazione:
export default ['packages/*'];
Vitest considererà ogni cartella in packages
come un progetto separato, anche se non contiene un file di configurazione.
WARNING
Vitest non considererà la configurazione radice come un progetto dello spazio di lavoro (quindi non eseguirà i test specificati in include
) a meno che non sia specificato in questa configurazione.
Puoi anche fare riferimento ai progetti utilizzando i loro file di configurazione:
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
Questo pattern includerà solo i progetti che hanno un file vitest.config
contenente e2e
o unit
prima dell'estensione.
WARNING
Se fai riferimento a nomi di file con pattern glob, assicurati che il tuo file di configurazione inizi con vite.config
o vitest.config
. Altrimenti Vitest ignorerà il file.
Puoi anche definire i progetti utilizzando la configurazione inline. Il file dello spazio di lavoro supporta l'uso di entrambe le sintassi contemporaneamente.
import { defineWorkspace } from 'vitest/config';
// defineWorkspace offre un'ottima esperienza di sviluppo con suggerimenti sui tipi
export default defineWorkspace([
'packages/*',
{
// aggiungi la proprietà `extends` per unire due configurazioni
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// è consigliabile definire un nome quando si utilizzano configurazioni inline
name: 'happy-dom',
environment: 'happy-dom',
},
},
{
test: {
include: ['tests/**/*.{node}.test.{ts,js}'],
name: 'node',
environment: 'node',
},
},
]);
WARNING
Tutti i progetti devono avere nomi univoci. Altrimenti, Vitest genererà un errore. Se non fornisci un nome all'interno della configurazione inline, Vitest assegnerà un numero. Se non fornisci un nome all'interno di una configurazione di progetto definita con la sintassi glob, Vitest utilizzerà il nome della directory come predefinito.
Se non utilizzi configurazioni inline, puoi semplicemente creare un piccolo file JSON nella tua directory principale:
["packages/*"]
I progetti dello spazio di lavoro non supportano tutte le proprietà di configurazione. Per una maggiore sicurezza dei tipi, usa defineProject
invece del metodo defineConfig
all'interno dei file di configurazione del progetto:
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters" non è supportato in una configurazione di progetto,
// quindi genererà un errore
reporters: ['json'],
},
});
Configurazione
Nessuna delle opzioni di configurazione viene ereditata dal file di configurazione di livello radice. Puoi creare un file di configurazione condiviso e unirlo manualmente alla configurazione del progetto:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
Inoltre, alcune opzioni di configurazione non sono consentite in una configurazione di progetto. In particolare:
coverage
: la copertura viene eseguita per l'intero spazio di lavororeporters
: possono essere supportati solo i reporter a livello della cartella principaleresolveSnapshotPath
: viene rispettato solo il resolver a livello della cartella principale- tutte le altre opzioni che non influiscono sui test runner
TIP
Tutte le opzioni di configurazione che non sono supportate all'interno di una configurazione di progetto hanno il segno * accanto a loro nella pagina "Config".
Copertura
La copertura per i progetti dello spazio di lavoro è disponibile senza configurazione aggiuntiva. Tuttavia, se hai abilitato l'opzione all
e utilizzi estensioni non convenzionali in alcuni dei tuoi progetti, dovrai avere un plugin che gestisca questa estensione nel tuo file di configurazione principale.
Ad esempio, se hai un pacchetto che utilizza file .vue e ha il suo file di configurazione, ma alcuni dei file non vengono importati nei tuoi test, la copertura fallirà tentando di analizzare l'utilizzo di file non utilizzati, perché si basa sulla configurazione principale anziché su quella del progetto.