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:
nodeist die Standardumgebung.jsdomemuliert eine Browserumgebung, indem es die Browser-API bereitstellt und das Paketjsdomverwendet.happy-domemuliert 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-runtimeemuliert 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 { expect, 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;