Tesztprojektek
Minta projekt
WARNING
Ez a funkció korábban workspace néven volt ismert. A workspace elavult a 3.2-es verzió óta, és felváltotta a projects konfiguráció. Funkcionálisan megegyeznek.
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 beállításokban, de használható tesztek futtatására különböző konfigurációkkal is, például resolve.alias, plugins, vagy test.browser beállításokkal, és még sok mással.
Projektek definiálása
A projekteket a gyökér konfigurációban definiálhatja:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*'],
},
});A projektkonfigurációk lehetnek beágyazott konfigurációk, fájlokra mutató hivatkozások vagy glob minták, amelyek a projektekre hivatkoznak. Például, ha van egy packages nevű mappája, amely tartalmazza a projektjeit, definiálhat egy tömböt a gyökér Vitest konfigurációjában:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['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. Ha ez a glob minta bármilyen fájlra érvényes, az Vitest konfigurációnak minősül, még akkor is, ha nincs vitest a nevében, vagy ismeretlen fájlkiterjesztéssel rendelkezik.
WARNING
A Vitest nem kezeli a gyökér vitest.config fájlt projektként, kivéve ha explicit módon meg van adva a konfigurációban. Következésképpen a gyökérkonfiguráció csak a globális opciókat befolyásolja, mint például a reporters és a coverage. Ne feledje, hogy a Vitest mindig futtat bizonyos plugin hookokat – mint például az apply, config, configResolved vagy configureServer – amelyek a gyökér konfigurációs fájlban vannak megadva. A Vitest ugyanazokat a pluginokat használja a globális beállítások és az egyéni lefedettségi szolgáltatók futtatásához is.
A projektekre a konfigurációs fájljaikkal is hivatkozhatunk:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*/vitest.config.{e2e,unit}.ts'],
},
});Ez a minta csak azokat a projekteket fogja tartalmazni, amelyeknek van vitest.config fájljuk, és az e2e vagy unit szerepel a kiterjesztés előtt.
A projekteket beágyazott konfigurációval is definiálhatja. A konfiguráció mindkét szintaxist egyszerre támogatja.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: [
// illeszkedik minden mappára és fájlra a `packages` mappán belül
'packages/*',
{
// az "extends: true" opcióval örökölheti a gyökérkonfiguráció opcióit
extends: true,
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// beágyazott konfigurációk esetén név megadása javasolt
name: 'happy-dom',
environment: 'happy-dom',
},
},
{
test: {
include: ['tests/**/*.{node}.test.{ts,js}'],
// a címke színe módosítható
name: { label: 'node', color: 'green' },
environment: 'node',
},
},
],
},
});WARNING
Minden projektnek egyedi névvel kell rendelkeznie; ellenkező esetben a Vitest hibát dob. Ha a beágyazott 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ájlban található "name" tulajdonságot használja, vagy ha nincs ilyen, akkor a mappa nevét.
Nem minden konfigurációs tulajdonság használható projektekben. 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 projektkonfigurációban,
// ezért hibát fog mutatni
reporters: ['json'],
},
});Tesztek futtatása
A tesztek futtatásához határozzon meg egy szkriptet a gyökér package.json fájlban:
{
"scripts": {
"test": "vitest"
}
}Most a tesztek futtathatók a csomagkezelő segítségével:
npm run testyarn testpnpm run testbun run testHa csak egyetlen projekten belül szeretne teszteket futtatni, használja a --project CLI opciót:
npm run test --project e2eyarn test --project e2epnpm run test --project e2ebun run test --project e2eTIP
A --project CLI opció többször is alkalmazható több projekt szűrésére:
npm run test --project e2e --project unityarn test --project e2e --project unitpnpm run test --project e2e --project unitbun run test --project e2e --project unitKonfiguráció
Egyetlen konfigurációs opció sem öröklődik át 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',
},
})
);Ezenkívül alkalmazhatja az extends opciót a gyökérszintű konfigurációból való örökléshez. Minden opció egyesül.
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
test: {
pool: 'threads',
projects: [
{
// örökli az opciókat ebből a konfigurációból, mint a pluginok és a pool
extends: true,
test: {
name: 'unit',
include: ['**/*.unit.test.ts'],
},
},
{
// nem örököl semmilyen opciót ebből a konfigurációból
// ez az alapértelmezett viselkedés
extends: false,
test: {
name: 'integration',
include: ['**/*.integration.test.ts'],
},
},
],
},
});Nem támogatott opciók
Néhány konfigurációs opció nem megengedett projektkonfigurációban. A legfontosabbak:
coverage: a lefedettség az egész folyamatra történikreporters: csak a gyökérszintű riporterek támogatottakresolveSnapshotPath: csak a gyökérszintű feloldó érvényesül- minden más opció, amely nem befolyásolja a tesztfuttatókat
Minden olyan konfigurációs opció, amely nem támogatott projektkonfiguráción belül, * jellel van megjelölve a "Konfiguráció" útmutatóban. Ezeket egyszer kell definiálni a gyökér konfigurációs fájlban.