Munkaterület
Példa projekt
A Vitest lehetővé teszi több projektkonfiguráció definiálását egyetlen Vitest folyamaton belül. Ez a funkció különösen hasznos monorepo környezetekben, de használható tesztek futtatására különböző konfigurációkkal is, mint például resolve.alias
, plugins
, vagy test.browser
és egyéb beállításokkal.
Munkaterület definiálása
Egy munkaterületnek tartalmaznia kell egy vitest.workspace
vagy vitest.projects
fájlt a gyökérkönyvtárában (ugyanabban a mappában, mint a gyökérkonfigurációs fájl, vagy a munkakönyvtárban, ha az nem létezik). A Vitest támogatja a ts
, js
és json
kiterjesztéseket ehhez a fájlhoz.
ELNEVEZÉS
Kérjük, vegye figyelembe, hogy ezt a funkciót workspace
-nek nevezik, nem workspaces
-nek (az "s" nélkül a végén).
A munkaterület konfigurációs fájljának alapértelmezett exporttal kell rendelkeznie, amely a projektekre hivatkozó fájlok vagy glob minták listáját tartalmazza. Például, ha van egy packages
nevű mappája, amely tartalmazza a projektjeit, akkor definiálhat egy munkaterületet ezzel a konfigurációs fájllal:
export default ['packages/*'];
A Vitest a packages
mappában található minden mappát külön projektként fog kezelni, még akkor is, ha nincs benne konfigurációs fájl. A Vitest 2.1 óta, ha ez a glob minta bármilyen fájlra illeszkedik, az Vitest konfigurációnak számít, még akkor is, ha nincs vitest
a nevében.
WARNING
A Vitest nem tekinti a gyökér vitest.config
fájlt munkaterületi projektként, hacsak azt nem adták meg explicit módon a munkaterület konfigurációjában. Következésképpen a gyökérkonfiguráció csak a globális opciókat befolyásolja, például a reporters
és a coverage
beállításokat.
A projektekre a konfigurációs fájljaik segítségével is hivatkozhat:
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
Ez a minta csak azokat a projekteket fogja tartalmazni, amelyek vitest.config
fájljának nevében e2e
vagy unit
szerepel a kiterjesztés előtt.
A projekteket soron belüli konfigurációval is definiálhatja. A munkaterület fájl mindkét szintaxist támogatja.
import { defineWorkspace } from 'vitest/config';
// a defineWorkspace kiváló típus-tippelési élményt biztosít a fejlesztők számára
export default defineWorkspace([
// illeszkedik minden mappára és fájlra a `packages` mappán belül
'packages/*',
{
// az "extends" segítségével két konfiguráció egyesíthető
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// ajánlott nevet megadni soron belüli konfigurációk használatakor
name: 'happy-dom',
environment: 'happy-dom',
},
},
{
test: {
include: ['tests/**/*.{node}.test.{ts,js}'],
name: 'node',
environment: 'node',
},
},
]);
WARNING
Minden projektnek egyedi névvel kell rendelkeznie; ellenkező esetben a Vitest hibát jelez. Ha a soron belüli konfigurációban nincs megadva név, a Vitest egy számot rendel hozzá. A glob szintaxissal definiált projektkonfigurációk esetén a Vitest alapértelmezés szerint a legközelebbi package.json
fájl "name" tulajdonságát fogja használni, vagy ha az hiányzik, akkor a mappa nevét.
Ha nem használ soron belüli konfigurációkat, létrehozhat egy kis JSON fájlt a gyökérkönyvtárában:
["packages/*"]
A munkaterületi projektek nem támogatják az összes konfigurációs beállítást. A jobb típusbiztonság érdekében használja a defineProject
metódust a defineConfig
helyett a projektkonfigurációs fájlokban:
// @errors: 2769
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// a "reporters" nem támogatott egy projektkonfigurációban,
// így hibát fog jelezni
reporters: ['json'],
},
});
Tesztek futtatása
A munkaterületen belüli tesztek futtatásához definiáljon egy szkriptet a gyökér package.json
fájljában:
{
"scripts": {
"test": "vitest"
}
}
Mostantól a tesztek futtathatók a csomagkezelővel:
npm run test
yarn test
pnpm run test
bun test
Ha csak egyetlen projektben kell teszteket futtatnia, használja a --project
CLI opciót:
npm run test --project e2e
yarn test --project e2e
pnpm run test --project e2e
bun test --project e2e
TIP
A --project
parancssori (CLI) opciót többször is használhatja több projekt szűrésére:
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
Konfiguráció
Egyetlen konfigurációs opció sem öröklődik a gyökérszintű konfigurációs fájlból. Létrehozhat egy megosztott konfigurációs fájlt, és egyesítheti azt a projektkonfigurációval:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
A defineWorkspace
szintjén használhatja az extends
opciót a gyökérszintű konfiguráció öröklésére. Minden opció egyesül.
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éhány konfigurációs opció nem engedélyezett egy projektkonfigurációban. A legfontosabb tiltott opciók:
coverage
: a lefedettség az egész munkaterületre vonatkozikreporters
: csak a gyökérszintű riportolók támogatottakresolveSnapshotPath
: csak a gyökérszintű feloldó érvényes- minden egyéb opció, amely nem befolyásolja a tesztfuttatókat
TIP
Minden olyan konfigurációs opció, amely nem támogatott egy projektkonfiguráción belül, * jellel van megjelölve a "Konfiguráció" útmutatóban.