Testovací prostředí
Vitest nabízí možnost environment
pro spouštění kódu v konkrétním prostředí. Chování prostředí lze dále upravit pomocí možnosti environmentOptions
.
Ve výchozím nastavení jsou k dispozici následující prostředí:
node
je výchozí prostředí.jsdom
emuluje prostředí prohlížeče a poskytuje API prohlížeče; využívá balíčekjsdom
.happy-dom
emuluje prostředí prohlížeče a poskytuje API prohlížeče; je považováno za rychlejší nežjsdom
, avšak postrádá některá API; využívá balíčekhappy-dom
.edge-runtime
emuluje Vercel edge-runtime; využívá balíček@edge-runtime/vm
.
INFO
Při použití prostředí jsdom
nebo happy-dom
se Vitest řídí stejnými pravidly jako Vite pro import CSS a assetů. Pokud import externí závislosti selže s chybou unknown extension .css
, je nutné ručně zahrnout celý importní řetězec přidáním všech balíčků do server.deps.external
. Například, pokud se chyba vyskytne v package-3
v tomto importním řetězci: source code -> package-1 -> package-2 -> package-3
, musíte přidat všechny tři balíčky do server.deps.external
.
require
CSS a assetů uvnitř externích závislostí je řešeno automaticky.
WARNING
Prostředí existují pouze při spouštění testů v Node.js.
browser
není ve Vitestu považován za prostředí. Pokud chcete spustit část svých testů pomocí režimu prohlížeče, můžete vytvořit testovací projekt.
Prostředí pro konkrétní soubory
Když nastavíte možnost environment
ve své konfiguraci, platí pro všechny testovací soubory ve vašem projektu. Pro detailnější kontrolu můžete použít kontrolní komentáře k určení prostředí pro konkrétní soubory. Kontrolní komentáře jsou komentáře, které začínají @vitest-environment
a za nimiž následuje název prostředí:
// @vitest-environment jsdom
import { expect, test } from 'vitest';
test('test', () => {
expect(typeof window).not.toBe('undefined');
});
Můžete také nastavit možnost environmentMatchGlobs
, která určuje prostředí na základě globálních vzorů.
Vlastní prostředí
Můžete si vytvořit vlastní balíček pro rozšíření prostředí Vitest. Chcete-li tak učinit, vytvořte balíček s názvem vitest-environment-${name}
nebo uveďte cestu k platnému JS/TS souboru. Tento balíček by měl exportovat objekt ve tvaru Environment
:
import type { Environment } from 'vitest/environments';
export default <Environment>{
name: 'custom',
transformMode: 'ssr',
// volitelné - pouze pokud podporujete fond "experimental-vm"
async setupVM() {
const vm = await import('node:vm');
const context = vm.createContext();
return {
getVmContext() {
return context;
},
teardown() {
// voláno po provedení všech testů s tímto prostředím
},
};
},
setup() {
// vlastní nastavení
return {
teardown() {
// voláno po provedení všech testů s tímto prostředím
},
};
},
};
WARNING
Vitest vyžaduje možnost transformMode
v objektu prostředí. Měla by být nastavena na ssr
nebo web
. Tato hodnota určuje, jak pluginy transformují zdrojový kód. Pokud je nastavena na ssr
, hooky pluginů obdrží ssr: true
při transformaci nebo resolvování souborů. Jinak je ssr
nastaveno na false
.
Máte také přístup k výchozím prostředím Vitest prostřednictvím modulu vitest/environments
:
import { builtinEnvironments, populateGlobal } from 'vitest/environments';
console.log(builtinEnvironments); // { jsdom, happy-dom, node, edge-runtime }
Vitest také poskytuje utilitní funkci populateGlobal
, kterou lze použít k přesunutí vlastností z objektu do globálního jmenného prostoru:
interface PopulateOptions {
// měly by být funkce, které nejsou třídami, navázány na globální jmenný prostor
bindFunctions?: boolean;
}
interface PopulateResult {
// seznam všech zkopírovaných klíčů, i když hodnota na původním objektu neexistuje
keys: Set<string>;
// mapa původního objektu, jehož hodnoty mohly být přepsány klíči
// tyto hodnoty můžete vrátit uvnitř funkce `teardown`
originals: Map<string | symbol, any>;
}
export function populateGlobal(
global: any,
original: any,
options: PopulateOptions
): PopulateResult;