Munkaterület
A Vitest beépített támogatást nyújt a monorepository-khoz egy munkaterület konfigurációs fájlon keresztül. Létrehozhatsz egy munkaterületet a projektek beállításainak meghatározásához.
Munkaterület definiálása
Egy munkaterületnek a gyökérmappájában (abban a mappában, ahol a konfigurációs fájl is található, ha van ilyen) kell tartalmaznia egy vitest.workspace
vagy vitest.projects
fájlt. A Vitest támogatja a ts
, js
és json
kiterjesztéseket ezekhez a fájlokhoz.
A munkaterület konfigurációs fájljának egy alapértelmezett exporttal kell rendelkeznie, ami a projektekre mutató fájlok vagy glob minták listája. Például, ha van egy mappád a projektjeiddel, amelynek neve packages
, definiálhatsz 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 kezeli, még akkor is, ha azok nem tartalmaznak konfigurációs fájlt.
WARNING
A Vitest nem tekinti a gyökér konfigurációt munkaterület projektnek (tehát nem futtatja az include
-ban megadott teszteket), hacsak nincs megadva ebben a konfigurációban.
Projektekre a konfigurációs fájljaik segítségével is hivatkozhatsz:
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
Ez a minta csak azokat a projekteket tartalmazza, amelyek vitest.config
fájljának neve a kiterjesztés előtt tartalmazza az e2e
vagy unit
szavakat.
WARNING
Ha glob mintával hivatkozol fájlnevekre, győződj meg róla, hogy a konfigurációs fájlod neve vite.config
-gal vagy vitest.config
-gal kezdődik. Ellenkező esetben a Vitest figyelmen kívül hagyja.
Inline konfigurációval is definiálhatsz projekteket. A munkaterület fájl egyszerre támogatja mindkét szintaxist.
import { defineWorkspace } from 'vitest/config';
// A `defineWorkspace` egy jó típusozási élményt (DX) biztosít.
export default defineWorkspace([
'packages/*',
{
// az "extends" segítségével két konfigurációt vonhatsz össze
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// inline konfigurációk használatakor ajánlott nevet megadni
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 fog dobni. Ha nem adsz meg nevet az inline konfigurációban, a Vitest automatikusan hozzárendel egy számot. Ha nem adsz meg nevet egy glob szintaxissal definiált projekt konfigurációban, a Vitest alapértelmezés szerint a könyvtárnevet fogja használni.
Ha nem használsz inline konfigurációkat, létrehozhatsz egy kis json fájlt a gyökérkönyvtáradban:
["packages/*"]
A munkaterület projektek nem támogatják az összes konfigurációs beállítást. A jobb típusbiztonság érdekében a projekt konfigurációs fájljaiban a defineConfig
helyett a defineProject
metódust használd:
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// a "reporters" nem támogatott egy projekt konfigurációban,
// tehát hibát fog jelezni
reporters: ['json'],
},
});
Konfiguráció
Egyetlen konfigurációs beállítás sem öröklődik a gyökérszintű konfigurációs fájlból. Létrehozhatsz egy közös konfigurációs fájlt, és egyesítheted a projekt konfigurációjával:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
Ezen kívül néhány konfigurációs opció nem engedélyezett egy projekt konfigurációban. Leginkább:
coverage
: a lefedettség az egész munkaterületre vonatkozikreporters
: csak a gyökérszintű riporterek támogatottakresolveSnapshotPath
: csak a gyökérszintű feloldó kerül figyelembe vételre- minden más opció, amely nem befolyásolja a teszt futtatókat
TIP
Minden olyan konfigurációs opció, amely nem támogatott egy projekt konfigurációban, * jellel van ellátva a "Config" oldalon.
Lefedettség
A munkaterület projektek lefedettsége azonnal használható. De ha az all
opció engedélyezve van, és néhány projektedben nem szabványos kiterjesztéseket használsz, akkor szükséged lesz egy pluginra, amely kezeli ezeket a kiterjesztéseket a gyökér konfigurációs fájlodban.
Például, ha van egy csomagod, amely Vue fájlokat használ, és saját konfigurációs fájllal rendelkezik, de a tesztjeidben néhány fájl nincs importálva, akkor a lefedettség hibát fog adni, amikor megpróbálja elemezni a nem használt fájlok felhasználását, mivel a gyökérszintű konfigurációra támaszkodik, nem pedig a projekt konfigurációjára.