Workspace
Ukázkový projekt
Vitest nativně podporuje monorepozitáře pomocí konfiguračního souboru workspace. Workspace umožňuje definovat nastavení pro jednotlivé projekty v rámci monorepozitáře.
Definování workspace
Workspace vyžaduje soubor vitest.workspace
nebo vitest.projects
v kořenovém adresáři (obvykle ve stejné složce jako hlavní konfigurační soubor Vitest, pokud jej používáte). Vitest podporuje koncovky ts
, js
a json
pro tento soubor.
Konfigurační soubor workspace by měl exportovat pole souborů nebo globálních vzorů, které odkazují na jednotlivé projekty. Například, pokud máte složku packages
obsahující vaše projekty, můžete definovat workspace takto:
export default ['packages/*'];
Vitest bude považovat každou složku v packages
za samostatný projekt, i když neobsahuje vlastní konfigurační soubor.
WARNING
Vitest nebude považovat kořenovou konfiguraci za projekt workspace (a tedy nespustí testy definované v include
), pokud není explicitně zahrnuta v konfiguraci workspace.
Projekty můžete odkazovat i pomocí jejich konfiguračních souborů:
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
Tento vzor zahrne pouze projekty s konfiguračním souborem vitest.config
, který má před příponou souboru uvedeno e2e
nebo unit
.
WARNING
Pokud odkazujete na soubory pomocí glob vzorů, ujistěte se, že název konfiguračního souboru začíná na vite.config
nebo vitest.config
. Jinak ho Vitest ignoruje.
Projekty lze definovat i pomocí inline konfigurace. Soubor workspace podporuje kombinaci obou syntaxí.
import { defineWorkspace } from 'vitest/config';
// defineWorkspace poskytuje typovou nápovědu
export default defineWorkspace([
'packages/*',
{
// "extends" umožňuje sloučení s jinou konfigurací
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// při použití inline konfigurace se doporučuje definovat název
name: 'happy-dom',
environment: 'happy-dom',
},
},
{
test: {
include: ['tests/**/*.{node}.test.{ts,js}'],
name: 'node',
environment: 'node',
},
},
]);
WARNING
Všechny projekty musí mít unikátní názvy. V opačném případě Vitest vyvolá chybu. Pokud název v inline konfiguraci nezadáte, Vitest automaticky přiřadí číselný identifikátor. Pokud název nezadáte v konfiguraci projektu definované pomocí glob syntaxe, Vitest použije název adresáře.
Pokud nepoužíváte inline konfigurace, můžete vytvořit jednoduchý JSON soubor v kořenovém adresáři:
["packages/*"]
Projekty workspace nepodporují všechny vlastnosti konfigurace. Pro lepší typovou bezpečnost doporučujeme používat metodu defineProject
namísto defineConfig
v konfiguračních souborech projektů:
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters" není v konfiguraci projektu podporován,
// takže dojde k chybě
reporters: ['json'],
},
});
Spouštění testů
Pro spuštění testů v rámci workspace definujte skript ve svém kořenovém package.json
:
{
"scripts": {
"test": "vitest"
}
}
Testy pak můžete spustit pomocí správce balíčků:
npm run test
yarn test
pnpm run test
bun test
Pokud potřebujete spustit testy pouze pro jeden konkrétní projekt, použijte přepínač --project
v CLI:
npm run test --project e2e
TIP
Přepínač --project
lze použít opakovaně pro filtrování více projektů:
npm run test --project e2e --project unit
Konfigurace
Žádná z možností konfigurace se nedědí z kořenového konfiguračního souboru do projektů. Můžete vytvořit sdílený konfigurační soubor a explicitně ho sloučit s konfigurací projektu:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
Některé možnosti konfigurace nejsou v konfiguraci projektu povoleny. Konkrétně:
coverage
: pokrytí kódu se počítá pro celý workspacereporters
: podporováni jsou pouze reportéři definovaní na kořenové úrovniresolveSnapshotPath
: používá se pouze resolver na kořenové úrovni- všechny ostatní možnosti, které nemají vliv na běh testů
TIP
Všechny možnosti konfigurace, které nejsou podporovány v konfiguraci projektu, jsou na stránce "Config" označeny značkou *.
Pokrytí kódu (Coverage)
Pokrytí kódu pro projekty workspace funguje automaticky. Pokud máte povolenou možnost all
a používáte nekonvenční přípony souborů v některých projektech, budete potřebovat plugin, který tyto přípony zpracuje ve vašem kořenovém konfiguračním souboru.
Například, pokud máte balíček, který používá Vue soubory a má vlastní konfigurační soubor, ale některé z těchto souborů nejsou importovány v testech, pokrytí kódu selže při analýze nepoužívaných souborů, protože se spoléhá na kořenovou konfiguraci, nikoli na konfiguraci projektu.