Pracovní prostor
Vitest nativně podporuje monorepozitáře prostřednictvím konfiguračního souboru pracovního prostoru. Pracovní prostor umožňuje definovat nastavení pro jednotlivé projekty v rámci monorepozitáře.
Definování pracovního prostoru
Soubor vitest.workspace
nebo vitest.projects
by měl být umístěn v kořenovém adresáři (ve stejné složce jako hlavní konfigurační soubor, pokud existuje). Vitest podporuje přípony ts
, js
a json
pro tento soubor.
Konfigurační soubor pracovního prostoru by měl exportovat pole souborů nebo glob vzorů odkazujících na jednotlivé projekty. Například, pokud máte složku s projekty s názvem packages
, můžete definovat pracovní prostor pomocí následujícího konfiguračního souboru:
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 pracovního prostoru (a tedy nespustí testy definované v include
), pokud není explicitně uveden v konfiguraci pracovního prostoru.
Můžete také odkazovat na projekty pomocí cesty k jejich konfiguračním souborům:
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
Tento vzor zahrne pouze projekty, které mají soubor vitest.config
s příponou e2e
nebo unit
.
WARNING
Pokud používáte glob vzory pro odkazování na konfigurační soubory, ujistěte se, že název souboru začíná na vite.config
nebo vitest.config
. V opačném případě jej Vitest ignoruje.
Projekty lze definovat i inline, přímo v konfiguračním souboru pracovního prostoru. Soubor pracovního prostoru podporuje kombinaci obou syntaxí.
import { defineWorkspace } from 'vitest/config';
// defineWorkspace poskytuje typovou nápovědu pro lepší vývojářskou zkušenost (DX)
export default defineWorkspace([
'packages/*',
{
// přidejte "extends" pro sloučení konfigurací
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// doporučuje se definovat název při použití inline konfigurací
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 ohlásí chybu. Pokud název nezadáte v inline konfiguraci, Vitest automaticky přiřadí číselný název. Pokud název nezadáte v konfiguraci projektu definované pomocí glob syntaxe, Vitest použije název adresáře.
Pokud neplánujete používat inline konfigurace, můžete vytvořit jednoduchý JSON soubor v kořenovém adresáři:
["packages/*"]
Projekty pracovního prostoru nepodporují všechny konfigurační vlastnosti. Pro lepší typovou bezpečnost doporučujeme používat metodu defineProject
namísto defineConfig
v konfiguračních souborech projektu.
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters" nejsou podporováni v konfiguraci projektu,
// takže se zobrazí chyba
reporters: ['json'],
},
});
Konfigurace
Žádná z konfiguračních voleb se nedědí z kořenového konfiguračního souboru. Můžete vytvořit sdílený konfigurační soubor a sloučit jej 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é konfigurační volby nejsou v konfiguraci projektu povoleny. Patří mezi ně:
coverage
: pokrytí se vztahuje na celý pracovní prostorreporters
: jsou podporováni pouze reportéři definovaní na kořenové úrovniresolveSnapshotPath
: je respektován pouze resolver definovaný na kořenové úrovni- všechny ostatní možnosti, které neovlivňují spouštěče testů
TIP
Všechny konfigurační volby, které nejsou podporovány v konfiguraci projektu, jsou na stránce "Config" označeny značkou *.
Pokrytí
Pokrytí kódu pro projekty pracovního prostoru funguje automaticky, bez nutnosti další konfigurace. Pokud máte povolenou volbu all
a používáte v některých projektech nekonvenční přípony souborů, budete potřebovat plugin, který tyto přípony zpracuje v 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í selže, protože se při analýze nepoužívaných souborů spoléhá na kořenovou konfiguraci, a nikoli na konfiguraci projektu.