Testumgebung
Vitest bietet die Option environment
, um Code in einer bestimmten Umgebung auszuführen. Sie können das Verhalten der Umgebung mit der Option environmentOptions
anpassen.
Standardmäßig stehen Ihnen folgende Umgebungen zur Verfügung:
node
ist die Standardumgebung.jsdom
emuliert eine Browserumgebung, indem es die Browser-API bereitstellt und das Paketjsdom
verwendet.happy-dom
emuliert eine Browserumgebung durch Bereitstellung der Browser-API und gilt als schneller als jsdom, bietet aber nicht den vollen API-Umfang. Es verwendet das Pakethappy-dom
.edge-runtime
emuliert Vercels edge-runtime und verwendet das Paket@edge-runtime/vm
.
Umgebungen für bestimmte Dateien
Wenn Sie die Option environment
in Ihrer Konfiguration festlegen, wird sie auf alle Testdateien in Ihrem Projekt angewendet. Um eine präzisere Steuerung zu erreichen, können Sie Steuerkommentare verwenden, um die Umgebung für einzelne Dateien zu definieren. Steuerkommentare sind Kommentare, die mit @vitest-environment
beginnen und denen der Name der Umgebung folgt:
// @vitest-environment jsdom
import { test } from 'vitest';
test('test', () => {
expect(typeof window).not.toBe('undefined');
});
Alternativ können Sie die Option environmentMatchGlobs
verwenden, um die Umgebung anhand von Glob-Mustern festzulegen.
Benutzerdefinierte Umgebung
Ab Version 0.23.0 können Sie Ihr eigenes Paket erstellen, um die Vitest-Umgebung zu erweitern. Erstellen Sie dazu ein Paket mit dem Namen vitest-environment-${name}
oder geben Sie einen Pfad zu einer gültigen JS-Datei an (unterstützt ab 0.34.0). Dieses Paket sollte ein Objekt vom Typ Environment
exportieren:
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() {
// wird ausgeführt, nachdem alle Tests mit dieser Umgebung ausgeführt wurden
},
};
},
setup() {
// benutzerdefiniertes Setup
return {
teardown() {
// wird ausgeführt, nachdem alle Tests mit dieser Umgebung ausgeführt wurden
},
};
},
};
WARNING
Seit Version 0.34.0 benötigt Vitest die Option transformMode
für das Umgebungsobjekt. Sie sollte entweder ssr
oder web
sein. Dieser Wert bestimmt, wie Plugins den Quellcode transformieren. Wenn sie auf ssr
gesetzt ist, erhalten Plugin-Hooks ssr: true
, wenn sie Dateien transformieren oder auflösen. Andernfalls wird ssr
auf false
gesetzt.
Sie können auch über den Eintrag vitest/environments
auf die Standard-Vitest-Umgebungen zugreifen:
import { builtinEnvironments, populateGlobal } from 'vitest/environments';
console.log(builtinEnvironments); // { jsdom, happy-dom, node, edge-runtime }
Vitest bietet auch die Hilfsfunktion populateGlobal
, mit der Eigenschaften eines Objekts in den globalen Namespace übertragen werden können:
interface PopulateOptions {
// sollen Nicht-Klassen-Funktionen an den globalen Namespace gebunden werden?
bindFunctions?: boolean;
}
interface PopulateResult {
// eine Liste aller kopierten Schlüssel, auch wenn der Wert im Originalobjekt nicht vorhanden ist
keys: Set<string>;
// eine Map des Originalobjekts, das möglicherweise durch Schlüssel überschrieben wurde
originals: Map<string | symbol, any>;
}
export function populateGlobal(
global: any,
original: any,
options: PopulateOptions
): PopulateResult;