Skip to content
Vitest 1
Main Navigation LeitfadenAPIKonfigurationFortgeschritten
1.6.1
0.34.6

Deutsch

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Deutsch

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Aussehen

Sidebar Navigation

Leitfaden

Warum Vitest

Erste Schritte

Features

Arbeitsbereich

Kommandozeilenschnittstelle

Testfilter

Reporter

Codeabdeckung (Coverage)

Snapshot

Mocking

Typen testen

Vitest UI

Browser-Modus

In-Source-Testing

Testkontext

Testumgebung

Erweiterung von Matchern

IDE-Integration

Debugging

Vergleiche mit anderen Test-Runnern

Migrationsleitfaden

Häufige Fehler

Leistungsverbesserung

API

Test API Referenz

Mock-Funktionen

Vi

expect

expectTypeOf

assert

assertType

Konfiguration

Verwaltung der Vitest-Konfigurationsdatei

Vitest konfigurieren

Auf dieser Seite

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 Paket jsdom 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 Paket happy-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:

ts
// @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:

ts
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:

ts
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:

ts
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;
Pager
Vorherige SeiteTestkontext
Nächste SeiteErweiterung von Matchern

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/guide/environment

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors