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 testyarn testpnpm run testbun run testPokud potřebujete spustit testy pouze v rámci jednoho projektu, použijte příkaz CLI --project:
npm run test --project e2eyarn test --project e2epnpm run test --project e2ebun run test --project e2eTIP
Příkaz CLI --project lze použít vícekrát k filtrování několika projektů:
npm run test --project e2e --project unityarn test --project e2e --project unitpnpm run test --project e2e --project unitbun run test --project e2e --project unitKonfigurace
Žá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.