Ś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 { 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;