Munkaterület
Minta Projekt
A Vitest beépített támogatást nyújt a monorepo-khoz egy munkaterület konfigurációs fájlon keresztül. Létrehozhat munkaterületet a projektjei beállításainak definiálásához.
Munkaterület definiálása
Egy munkaterületnek rendelkeznie kell egy vitest.workspace
vagy vitest.projects
fájllal a gyökérmappájában (ugyanabban a mappában, mint a konfigurációs fájl, ha van ilyen). 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 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 minden mappát a packages
mappában külön projektként kezel, még akkor is, ha nincs benne konfigurációs fájl.
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.
A projekteket a konfigurációs fájljaikra is hivatkozhatja:
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
Ez a minta csak azokat a projekteket tartalmazza, amelyek vitest.config
fájlja tartalmazza az e2e
vagy unit
kifejezéseket a kiterjesztés előtt.
WARNING
Ha fájlnevekre glob mintával hivatkozik, győződjön meg arról, hogy a konfigurációs fájl neve vite.config
vagy vitest.config
-gal kezdődik. Ellenkező esetben a Vitest kihagyja azt.
A projekteket inline konfigurációval is definiálhatja. A munkaterület fájl támogatja a két szintaxis egyidejű használatát.
import { defineWorkspace } from 'vitest/config';
// A defineWorkspace szép típus-súgást biztosít (jó fejlesztői élményt)
export default defineWorkspace([
'packages/*',
{
// az "extends" hozzáadásával két konfigurációt egyesíthetünk
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// ajánlott nevet megadni inline 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 fog dobni. Ha nem ad meg nevet az inline konfigurációban, a Vitest automatikusan generált nevet fog használni. Ha nem ad meg nevet egy glob szintaxissal definiált projekt konfigurációban, a Vitest alapértelmezés szerint a könyvtár nevét fogja használni.
Ha nem használ inline konfigurációkat, létrehozhat egy kis json fájlt a gyökérkönyvtárban:
["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 használja a defineProject
metódust a defineConfig
helyett a projekt konfigurációs fájljaiban:
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// a "reporters" nem támogatott a projekt konfigurációban,
// tehát hibát fog mutatni
reporters: ['json'],
},
});
Tesztek futtatása
A tesztek futtatásához a munkaterületen belül definiáljon egy szkriptet a gyökér package.json
fájljában:
{
"scripts": {
"test": "vitest"
}
}
Most a tesztek futtathatók a csomagkezelő segítségével:
npm run test
yarn test
pnpm run test
bun test
Ha csak egyetlen projekten belül szeretne teszteket futtatni, használja a --project
CLI opciót:
npm run test --project e2e
TIP
A --project
CLI opció többször is használható több projekt szűrésére:
npm run test --project e2e --project unit
Konfiguráció
A konfigurációs beállítások egyike 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 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 beállítás nem engedélyezett a projekt konfigurációban. Ezek főként a következők:
coverage
: a lefedettség az egész munkaterületre érvényesreporters
: csak a gyökérszintű riporterek támogatottakresolveSnapshotPath
: csak a gyökérszintű feloldó kerül figyelembe vételre- minden más beállítás, amely nem befolyásolja a tesztfuttatókat
TIP
Minden konfigurációs beállítás, amely nem támogatott a projekt konfigurációban, * jellel van ellátva a "Config" oldalon.
Lefedettség (Coverage)
A munkaterület projektek lefedettsége azonnal működik. De ha az all
opció engedélyezve van, és nem szokványos kiterjesztéseket használ néhány projektben, akkor szüksége lesz egy bővítményre, amely kezeli ezt a kiterjesztést a gyökér konfigurációs fájljában.
Például, ha van egy csomagja, amely Vue fájlokat használ, és saját konfigurációs fájlja van, de néhány fájl nincs importálva a tesztjeibe, a lefedettség vizsgálat sikertelen lesz, amikor megpróbálja elemezni a nem használt fájlok használatát, mert a gyökér konfigurációra támaszkodik, nem pedig a projekt konfigurációjára.