Środowisko Testowe
Vitest oferuje opcję environment, aby uruchamiać kod w określonym środowisku. Możesz dostosować zachowanie środowiska za pomocą opcji environmentOptions.
Domyślnie dostępne są następujące środowiska:
node– środowisko domyślne.jsdom– symuluje środowisko przeglądarki, udostępniając API przeglądarki. Wykorzystuje pakietjsdom.happy-dom– emuluje środowisko przeglądarki, udostępniając API przeglądarki. Uważane za szybsze od jsdom, ale nie obsługuje wszystkich funkcji. Wykorzystuje pakiethappy-dom.edge-runtime– emuluje edge-runtime firmy Vercel. Wykorzystuje pakiet@edge-runtime/vm.
Środowiska dla konkretnych plików
Ustawienie opcji environment w konfiguracji globalnej zastosuje ją do wszystkich plików testowych w projekcie. Aby uzyskać bardziej szczegółową kontrolę, możesz użyć komentarzy sterujących, aby określić środowisko dla konkretnych plików. Komentarze sterujące zaczynają się od @vitest-environment, po którym następuje nazwa środowiska:
// @vitest-environment jsdom
import { expect, test } from 'vitest';
test('test', () => {
expect(typeof window).not.toBe('undefined');
});Możesz także użyć opcji environmentMatchGlobs, określając środowisko na podstawie wzorców glob.
Własne środowisko
Od wersji 0.23.0 możesz stworzyć własny pakiet, aby rozszerzyć środowisko Vitest. W tym celu utwórz pakiet o nazwie vitest-environment-${name} lub określ ścieżkę do prawidłowego pliku JS (obsługiwane od wersji 0.34.0). Ten pakiet powinien eksportować obiekt typu Environment:
import type { Environment } from 'vitest';
export default <Environment>{
name: 'custom',
transformMode: 'ssr',
// opcjonalne - tylko jeśli obsługujesz pulę "experimental-vm"
async setupVM() {
const vm = await import('node:vm');
const context = vm.createContext();
return {
getVmContext() {
return context;
},
teardown() {
// wywoływane po uruchomieniu wszystkich testów w tym środowisku
},
};
},
setup() {
// niestandardowa konfiguracja
return {
teardown() {
// wywoływana po wykonaniu wszystkich testów w tym środowisku
},
};
},
};WARNING
Od wersji 0.34.0 Vitest wymaga opcji transformMode w obiekcie środowiska. Powinna ona przyjmować wartość ssr lub web. Ta wartość określa sposób transformacji kodu źródłowego przez wtyczki. Jeśli jest ustawiona na ssr, hooki wtyczek otrzymają ssr: true podczas transformacji lub rozwiązywania plików. W przeciwnym razie ssr będzie ustawione na false.
Możesz także uzyskać dostęp do domyślnych środowisk Vitest, importując je z vitest/environments:
import { builtinEnvironments, populateGlobal } from 'vitest/environments';
console.log(builtinEnvironments); // { jsdom, happy-dom, node, edge-runtime }Vitest udostępnia również funkcję pomocniczą populateGlobal, służącą do przenoszenia atrybutów z obiektu do przestrzeni globalnej:
interface PopulateOptions {
// czy funkcje, które nie są klasami, powinny być powiązane z globalną przestrzenią nazw
bindFunctions?: boolean;
}
interface PopulateResult {
// lista wszystkich kluczy, które zostały skopiowane, nawet jeśli w oryginalnym obiekcie nie istnieje odpowiadająca im wartość
keys: Set<string>;
// mapa oryginalnego obiektu, którego właściwości mogły zostać nadpisane
originals: Map<string | symbol, any>;
}
export function populateGlobal(
global: any,
original: any,
options: PopulateOptions
): PopulateResult;