Testovací prostředí
Vitest nabízí možnost environment
pro spouštění kódu ve specifickém prostředí. Chování prostředí můžete upravit pomocí možnosti environmentOptions
.
Ve výchozím nastavení můžete použít tato prostředí:
node
je výchozí prostředí.jsdom
emuluje prostředí prohlížeče poskytováním API prohlížeče, používá balíčekjsdom
.happy-dom
emuluje prostředí prohlížeče poskytováním API prohlížeče a je považováno za rychlejší než jsdom, ale postrádá některé API, používá balíčekhappy-dom
.edge-runtime
emuluje edge-runtime od Vercel, používá balíček@edge-runtime/vm
.
Prostředí pro specifické soubory
Pokud nastavíte možnost environment
ve vaší konfiguraci, bude se vztahovat na všechny testovací soubory ve vašem projektu. Pro jemnější kontrolu můžete použít řídicí komentáře k určení prostředí pro specifické soubory. Řídicí komentáře jsou komentáře, které začínají na @vitest-environment
a následuje je název prostředí:
// @vitest-environment jsdom
import { test } from 'vitest';
test('test', () => {
expect(typeof window).not.toBe('undefined');
});
Můžete také nastavit volbu environmentMatchGlobs
určující prostředí na základě glob vzorů.
Vlastní prostředí
Počínaje verzí 0.23.0 si můžete vytvořit vlastní balíček pro rozšíření prostředí Vitest. Chcete-li to provést, vytvořte balíček s názvem vitest-environment-${name}
nebo zadejte cestu k platnému JS souboru (podporováno od verze 0.34.0). Tento balíček by měl exportovat objekt ve formátu Environment
:
import type { Environment } from 'vitest';
export default <Environment>{
name: 'custom',
transformMode: 'ssr',
// optional - only if you support "experimental-vm" pool
async setupVM() {
const vm = await import('node:vm');
const context = vm.createContext();
return {
getVmContext() {
return context;
},
teardown() {
// called after all tests with this env have been run
},
};
},
setup() {
// custom setup
return {
teardown() {
// called after all tests with this env have been run
},
};
},
};
WARNING
Od verze 0.34.0 vyžaduje Vitest volbu 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
, pluginové háky obdrží ssr: true
při transformaci nebo resolvování souborů. Jinak je ssr
nastaveno na false
.
K výchozím prostředím Vitest máte také přístup pomocí modulu vitest/environments
:
import { builtinEnvironments, populateGlobal } from 'vitest/environments';
console.log(builtinEnvironments); // { jsdom, happy-dom, node, edge-runtime }
Vitest také poskytuje utilitu populateGlobal
, která umožňuje přesunout vlastnosti z objektu do globálního jmenného prostoru:
interface PopulateOptions {
// should non-class functions be bind to the global namespace
bindFunctions?: boolean;
}
interface PopulateResult {
// a list of all keys that were copied, even if value doesn't exist on original object
keys: Set<string>;
// a map of original object that might have been overridden with keys
// můžete vrátit tyto hodnoty v rámci funkce `teardown`
originals: Map<string | symbol, any>;
}
export function populateGlobal(
global: any,
original: any,
options: PopulateOptions
): PopulateResult;