Tesztkörnyezet
A Vitest az environment
opciót biztosítja a kód adott környezetben történő futtatásához. Az environmentOptions
opcióval finomhangolhatod a környezet viselkedését.
Alapértelmezés szerint a következő környezetek állnak rendelkezésre:
node
: az alapértelmezett környezet.jsdom
: böngésző API-kat biztosítva emulálja a böngészőkörnyezetet ajsdom
csomag használatával.happy-dom
: szintén böngésző API-kat biztosítva emulálja a böngészőkörnyezetet. Ajsdom
-nál gyorsabbnak tartják, de bizonyos API-k hiányozhatnak belőle. Ahappy-dom
csomagot használja.edge-runtime
: a Vercel edge-runtime környezetét emulálja a@edge-runtime/vm
csomag használatával.
Környezetek meghatározott fájlokhoz
Ha az environment
opciót a konfigurációs fájlban állítod be, az a projekt összes tesztfájljára vonatkozik. Azonban részletesebb szabályozás érdekében vezérlő megjegyzésekkel adhatod meg az egyes fájlokhoz tartozó környezetet. A vezérlő megjegyzések @vitest-environment
előtaggal kezdődnek, amelyet a környezet neve követ:
// @vitest-environment jsdom
import { test } from 'vitest';
test('test', () => {
expect(typeof window).not.toBe('undefined');
});
Alternatív megoldásként beállíthatod az environmentMatchGlobs
opciót is, amely glob minták alapján határozza meg a környezetet.
Egyéni környezet
A 0.23.0 verziótól kezdve létrehozhatsz saját csomagot a Vitest környezetének bővítéséhez. Ehhez hozz létre egy vitest-environment-${name}
nevű csomagot, vagy adj meg egy érvényes JS fájl elérési útját (a 0.34.0 verzió óta támogatott). A csomagnak egy Environment
típusú objektumot kell exportálnia:
import type { Environment } from 'vitest';
export default <Environment>{
name: 'custom',
transformMode: 'ssr',
// opcionális - csak akkor, ha támogatja az "experimental-vm" pool-t
async setupVM() {
const vm = await import('node:vm');
const context = vm.createContext();
return {
getVmContext() {
return context;
},
teardown() {
// akkor hívódik meg, miután az összes teszt ebben a környezetben lefutott
},
};
},
setup() {
// egyéni beállítás
return {
teardown() {
// akkor hívódik meg, miután az összes teszt ebben a környezetben lefutott
},
};
},
};
WARNING
A 0.34.0-ás verziótól kezdve a Vitest megköveteli a transformMode
opció megadását a környezeti objektumban. Értéke ssr
vagy web
lehet. Ez az érték határozza meg, hogy a bővítmények hogyan transzformálják a forráskódot. Ha ssr
-re van állítva, a bővítmények ssr: true
értéket kapnak a fájlok transzformálásakor vagy feloldásakor. Ellenkező esetben az ssr
értéke false
.
A Vitest alapértelmezett környezeteihez a vitest/environments
modulon keresztül is hozzáférhetsz:
import { builtinEnvironments, populateGlobal } from 'vitest/environments';
console.log(builtinEnvironments); // { jsdom, happy-dom, node, edge-runtime }
A Vitest a populateGlobal
segédfüggvényt is biztosítja, amellyel tulajdonságokat helyezhetsz át egy objektumból a globális névtérbe.
interface PopulateOptions {
// a nem osztályfüggvényeket a globális névtérhez kell kötniük
bindFunctions?: boolean;
}
interface PopulateResult {
// az összes másolt kulcs listája, még akkor is, ha az érték nem létezik az eredeti objektumban
keys: Set<string>;
// az eredeti objektum egy térképe, amelyet kulcsokkal felülírhattak
// ezeket az értékeket a `teardown` függvényben adhatja vissza
originals: Map<string | symbol, any>;
}
export function populateGlobal(
global: any,
original: any,
options: PopulateOptions
): PopulateResult;