Testovací projekty
Ukázkový projekt
WARNING
Tato funkce je také známá jako workspace
. workspace
je od verze 3.2 zastaralý a nahrazen konfigurací projects
. Funkčně jsou stejné.
Vitest umožňuje definovat více konfigurací projektů v rámci jednoho procesu Vitest. Tato funkce je obzvláště užitečná pro nastavení monorepo, ale lze ji také použít k provádění testů s různými konfiguracemi, jako jsou resolve.alias
, plugins
nebo test.browser
a další.
Definování projektů
Projekty můžete definovat ve svém hlavním konfiguračním souboru:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*'],
},
});
Konfigurace projektů mohou být inline konfigurace, soubory nebo glob vzory, které odkazují na vaše projekty. Například, pokud máte složku packages
, která obsahuje vaše projekty, můžete definovat pole ve svém hlavním konfiguračním souboru Vitest:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*'],
},
});
Vitest bude každou složku v packages
považovat za samostatný projekt, i když nemá konfigurační soubor. Pokud tento glob vzor odpovídá jakémukoli souboru, bude považován za konfigurační soubor Vitest, i když v názvu neobsahuje vitest
nebo má neobvyklou příponu.
WARNING
Vitest nepovažuje hlavní soubor vitest.config
za projekt, pokud není explicitně specifikován v konfiguraci. V důsledku toho hlavní konfigurace ovlivňuje pouze globální možnosti, jako jsou reporters
a coverage
. Vitest vždy spouští určité pluginové hooky, jako apply
, config
, configResolved
nebo configureServer
, specifikované v hlavním konfiguračním souboru. Vitest také používá stejné pluginy k provádění globálních nastavení a vlastního poskytovatele pokrytí.
Projekty můžete také odkazovat pomocí jejich konfiguračních souborů:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*/vitest.config.{e2e,unit}.ts'],
},
});
Tento vzor zahrnuje pouze projekty s konfiguračním souborem vitest.config
, který obsahuje e2e
nebo unit
před příponou.
Projekty můžete také definovat pomocí inline konfigurace. Konfigurace podporuje obě syntaxe současně.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: [
// odpovídá každé složce a souboru uvnitř složky `packages`
'packages/*',
{
// přidejte "extends: true" pro zdědění možností z hlavní konfigurace
extends: true,
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}'],
// barva popisku názvu může být změněna
name: { label: 'node', color: 'green' },
environment: 'node',
},
},
],
},
});
WARNING
Všechny projekty musí mít jedinečné názvy; jinak Vitest vyvolá chybu. Pokud název není uveden v inline konfiguraci, Vitest přiřadí číslo. 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.
Projekty nepodporují všechny konfigurační vlastnosti. Pro lepší typovou bezpečnost použijte metodu defineProject
namísto defineConfig
v konfiguračních souborech projektu:
// @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ů definujte skript ve svém hlavním package.json
:
{
"scripts": {
"test": "vitest"
}
}
Nyní lze testy spouštět pomocí vašeho správce balíčků:
npm run test
yarn test
pnpm run test
bun run test
Pokud potřebujete spustit testy pouze v rámci jednoho projektu, použijte příkaz CLI --project
:
npm run test --project e2e
yarn test --project e2e
pnpm run test --project e2e
bun run test --project e2e
TIP
Příkaz 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 run test --project e2e --project unit
Konfigurace
Žádné konfigurační možnosti nejsou zděděny z konfiguračního souboru na hlavní ú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',
},
})
);
Dále můžete použít možnost extends
pro zdědění z vaší konfigurace na hlavní úrovni. Všechna nastavení budou sloučena.
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
test: {
pool: 'threads',
projects: [
{
// zdědí možnosti z této konfigurace, jako jsou pluginy a pool
extends: true,
test: {
name: 'unit',
include: ['**/*.unit.test.ts'],
},
},
{
// nezdědí žádné možnosti z této konfigurace
// toto je výchozí chování
extends: false,
test: {
name: 'integration',
include: ['**/*.integration.test.ts'],
},
},
],
},
});
Nepodporované možnosti
Některé konfigurační volby nejsou povoleny v projektové konfiguraci. Nejvýznamnější jsou:
coverage
: pokrytí se provádí pro celý procesreporters
: podporovány jsou pouze reportéry na hlavní úrovniresolveSnapshotPath
: respektován je pouze resolver na hlavní úrovni- všechny ostatní možnosti, které neovlivňují testovací běžce
Všechny konfigurační možnosti, které nejsou podporovány v konfiguraci projektu, jsou označeny znakem * v průvodci "Konfigurace". Musí být definovány jednou v hlavním konfiguračním souboru.