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 Browser API; využívá balíčekjsdom
.happy-dom
emuluje prostředí prohlížeče, poskytuje Browser API a je považováno za rychlejší než jsdom, ačkoli mu chybí některá API; využívá balíčekhappy-dom
.edge-runtime
emuluje edge-runtime od Vercel; 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 při importu CSS a assetů. Pokud import externí závislosti selže s chybou "unknown extension .css", je nutné ručně zahrnout celý řetězec importů přidáním všech balíčků do server.deps.external
. Například, pokud chyba nastane v package-3
v tomto řetězci importů: source code -> package-1 -> package-2 -> package-3
, musíte přidat všechny tři balíčky do server.deps.external
.
Od Vitest 2.0.4 se require
CSS a assetů uvnitř externích závislostí řeší automaticky.
WARNING
"Prostředí" existují pouze při spouštění testů v Node.js.
browser
není ve Vitestu považováno za prostředí. Pokud chcete spustit část svých testů pomocí režimu prohlížeče, můžete vytvořit projekt pracovního prostoru.
Prostředí pro Konkrétní Soubory
Když nastavíte možnost environment
ve své konfiguraci, bude se vztahovat na všechny testovací soubory ve vašem projektu. Pro jemnější kontrolu můžete použít ovládací komentáře k určení prostředí pro konkrétní soubory. Ovládací 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 zadejte cestu k platnému souboru JS/TS. Tento balíček by měl exportovat objekt ve tvaru Environment
:
import type { Environment } from 'vitest';
export default <Environment>{
name: 'custom',
transformMode: 'ssr',
// volitelné – pouze pokud podporujete "experimental-vm" pool
async setupVM() {
const vm = await import('node:vm');
const context = vm.createContext();
return {
getVmContext() {
return context;
},
teardown() {
// voláno po spuštění všech testů s tímto prostředím
},
};
},
setup() {
// vlastní nastavení
return {
teardown() {
// voláno po spuštění všech testů s tímto prostředím
},
};
},
};
WARNING
Vitest vyžaduje možnost transformMode
na objektu prostředí. Měla by být rovna ssr
nebo web
. Tato hodnota určuje, jak budou pluginy transformovat zdrojový kód. Pokud je nastavena na ssr
, hooky pluginů obdrží ssr: true
při transformaci nebo řešení souborů. Jinak je ssr
nastaveno na false
.
Máte také přístup k výchozím prostředím Vitest prostřednictvím vstupu vitest/environments
:
import { builtinEnvironments, populateGlobal } from 'vitest/environments';
console.log(builtinEnvironments); // { jsdom, happy-dom, node, edge-runtime }
Vitest také poskytuje pomocnou funkci populateGlobal
, kterou lze použít k přesunutí vlastností objektu do globálního jmenného prostoru:
interface PopulateOptions {
// měly by být funkce, které nejsou třídami, vázány na globální jmenný prostor
bindFunctions?: boolean;
}
interface PopulateResult {
// seznam všech klíčů, které byly zkopírovány, i když hodnota neexistuje na původním objektu
keys: Set<string>;
// mapa původního objektu, jehož klíče mohly být přepsány
// tyto hodnoty můžete vrátit v rámci funkce `teardown`
originals: Map<string | symbol, any>;
}
export function populateGlobal(
global: any,
original: any,
options: PopulateOptions
): PopulateResult;