Pracovní prostor
Ukázkový projekt
Vitest umožňuje definovat více konfigurací projektu v rámci jedné instance. Tato funkce je obzvláště užitečná pro monorepo struktury, ale lze ji také využít ke spouštění testů s různými konfiguracemi, jako jsou resolve.alias
, plugins
nebo test.browser
a další.
Definování pracovního prostoru
Pracovní prostor musí obsahovat soubor vitest.workspace
nebo vitest.projects
ve svém kořenovém adresáři (umístěný ve stejné složce jako váš kořenový konfigurační soubor, nebo pokud neexistuje, ve vašem pracovním adresáři). Vitest podporuje pro tento soubor přípony ts
, js
a json
.
NÁZEV
Vezměte prosím na vědomí, že tato funkce se jmenuje workspace
, nikoli workspaces
(bez "s" na konci).
Konfigurační soubor pracovního prostoru musí mít výchozí export se seznamem souborů nebo glob vzorů odkazujících na vaše projekty. Například, pokud máte složku s názvem packages
, která obsahuje vaše projekty, můžete definovat pracovní prostor s tímto konfiguračním souborem:
export default ['packages/*'];
Vitest bude považovat každou složku v packages
za samostatný projekt, i když uvnitř nemá konfigurační soubor. Od verze Vitest 2.1, pokud tento glob vzor odpovídá jakémukoli souboru, bude považován za konfiguraci Vitest, i když nemá ve svém názvu vitest
.
WARNING
Vitest nepovažuje kořenový soubor vitest.config
za projekt pracovního prostoru, pokud není explicitně specifikován v konfiguraci pracovního prostoru. Proto bude kořenová konfigurace ovlivňovat pouze globální možnosti, jako jsou reporters
a coverage
.
Můžete také odkazovat na projekty pomocí jejich konfiguračních souborů:
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
Tento vzor zahrne pouze projekty, které mají soubor vitest.config
obsahující e2e
nebo unit
před příponou.
Projekty můžete také definovat pomocí inline konfigurace. Soubor pracovního prostoru podporuje obě syntaxe současně.
import { defineWorkspace } from 'vitest/config';
// defineWorkspace poskytuje užitečnou nápovědu k typům
export default defineWorkspace([
// odpovídá každé složce a souboru uvnitř složky `packages`
'packages/*',
{
// přidejte "extends" pro sloučení dvou konfigurací
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// při použití inline konfigurací 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 jedinečné názvy; jinak Vitest vyhodí chybu. Pokud název není uveden v inline konfiguraci, Vitest přiřadí číselný identifikátor. Pro konfigurace projektů definované pomocí glob syntaxe Vitest ve výchozím nastavení použije vlastnost "name" v nejbližším souboru package.json
nebo, pokud žádný neexistuje, název složky.
Pokud nepoužíváte inline konfigurace, můžete vytvořit jednoduchý soubor JSON ve svém kořenovém adresáři:
["packages/*"]
Projekty pracovního prostoru nepodporují všechny konfigurační vlastnosti. Pro lepší typovou bezpečnost použijte v konfiguračních souborech projektu metodu defineProject
místo defineConfig
:
// @errors: 2769
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters" není podporováno v konfiguraci projektu,
// takže se zobrazí chyba
reporters: ['json'],
},
});
Spouštění testů
Pro spuštění testů uvnitř pracovního prostoru definujte skript ve svém kořenovém package.json
:
{
"scripts": {
"test": "vitest"
}
}
Nyní můžete spouštět testy pomocí svého správce balíčků:
npm run test
yarn test
pnpm run test
bun test
Pokud potřebujete spustit testy pouze pro jeden projekt, použijte přepínač CLI --project
:
npm run test --project e2e
yarn test --project e2e
pnpm run test --project e2e
bun test --project e2e
TIP
Přepínač CLI --project
lze použít vícekrát k filtrování několika projektů:
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
Konfigurace
Žádná z konfiguračních možností není zděděna z konfiguračního souboru na kořenové úrovni. Můžete vytvořit sdílený konfigurační soubor a sloučit jej s konfigurací projektu sami:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
Na úrovni defineWorkspace
můžete použít volbu extends
pro dědění z vaší konfigurace na kořenové úrovni. Všechny možnosti budou sloučeny do jedné.
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'],
},
},
]);
Některé konfigurační možnosti nejsou povoleny v konfiguraci projektu. Nejvýznamnější jsou:
coverage
: pokrytí se počítá pro celý pracovní prostorreporters
: podporovány jsou pouze reportéry na kořenové úrovniresolveSnapshotPath
: bere se v úvahu pouze resolver na kořenové úrovni- všechny ostatní možnosti, které neovlivňují spouštěče testů
TIP
Všechny konfigurační možnosti, které nejsou podporovány v konfiguraci projektu, jsou označeny znakem * v průvodci "Konfigurace".