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

Features ​

  • Vites Konfiguration, Transformatoren, Resolver und Plugins.
  • Verwenden Sie dieselbe Konfiguration wie in Ihrer App, um die Tests auszuführen!
  • Intelligenter & schneller Watch-Modus, ähnlich HMR für Tests!
  • Komponententests für Vue, React, Svelte, Lit und mehr
  • Out-of-the-Box-Unterstützung für TypeScript / JSX
  • ESM first, Top-Level-Await
  • Multi-Threading mit Workers über Tinypool
  • Benchmarking-Unterstützung mit Tinybench
  • Filtern, Timeouts und gleichzeitige Ausführung für Test-Suites und einzelne Tests
  • Workspace Unterstützung
  • Snapshot-Unterstützung, die mit Jest kompatibel ist
  • Chai ist für Assertions integriert + Jest expect-kompatible APIs
  • Tinyspy integriert für Mocking
  • happy-dom oder jsdom zum Mocken von DOM
  • Code Coverage über v8 oder istanbul
  • Rust-ähnliches In-Source-Testing
  • Typtests über expect-type
Erfahren Sie in einem Video, wie Sie Ihren ersten Test schreiben

Gemeinsame Konfiguration für Test, Entwicklung und Build ​

Vitests Konfiguration, Transformatoren, Resolver und Plugins ermöglichen die Wiederverwendung derselben Konfiguration wie in Ihrer App für die Testausführung.

Erfahren Sie mehr unter Konfigurieren von Vitest.

Watchmodus ​

bash
$ vitest

Wenn Sie Ihren Quellcode oder die Testdateien ändern, analysiert Vitest intelligent den Modulgraphen. Anschließend werden nur die relevanten Tests erneut ausgeführt, ähnlich wie HMR in Vite funktioniert.

vitest startet standardmäßig im Watch-Modus, wenn Sie sich in einer Entwicklungsumgebung befinden, und im Run-Modus in einer CI-Umgebung (sofern process.env.CI gesetzt ist). Sie können vitest watch oder vitest run verwenden, um den gewünschten Modus explizit festzulegen.

Gängige Web-Technologien Out-of-the-Box ​

Out-of-the-Box Unterstützung für ES Module / TypeScript / JSX / PostCSS

Threads ​

Standardmäßig führt Vitest Testdateien in mehreren Threads mithilfe von node:worker_threads über Tinypool (einem leichtgewichtigen Fork von Piscina) aus, wodurch Tests gleichzeitig ausgeführt werden können. Wenn Ihr Testcode nicht mit Multithreading kompatibel ist, können Sie auf --pool=forks umschalten, wodurch Tests in mehreren Prozessen mithilfe von node:child_process über Tinypool ausgeführt werden.

Um Tests in einem einzelnen Thread oder Prozess auszuführen, siehe poolOptions.

Vitest isoliert außerdem die Umgebung jeder Datei, sodass sich Änderungen an Umgebungsvariablen in einer Datei nicht auf andere auswirken. Die Isolation kann durch Übergabe von --no-isolate an die CLI deaktiviert werden (wobei die Korrektheit zugunsten der Laufzeitleistung beeinträchtigt wird).

Testfilterung ​

Vitest bietet verschiedene Möglichkeiten, die auszuführenden Tests einzugrenzen, um das Testen zu beschleunigen und die Konzentration auf die Entwicklung zu erleichtern.

Erfahren Sie mehr über Testfilterung.

Gleichzeitige Ausführung von Tests ​

Verwenden Sie .concurrent in aufeinanderfolgenden Tests, um diese parallel auszuführen.

ts
import { describe, it } from 'vitest';

// Die beiden mit concurrent markierten Tests werden parallel ausgeführt
describe('suite', () => {
  it('serial test', async () => {
    /* ... */
  });
  it.concurrent('concurrent test 1', async ({ expect }) => {
    /* ... */
  });
  it.concurrent('concurrent test 2', async ({ expect }) => {
    /* ... */
  });
});

Wenn Sie .concurrent für eine Test-Suite verwenden, wird jeder Test innerhalb dieser Suite parallel ausgeführt.

ts
import { describe, it } from 'vitest';

// Alle Tests innerhalb dieser Suite werden parallel ausgeführt
describe.concurrent('suite', () => {
  it('concurrent test 1', async ({ expect }) => {
    /* ... */
  });
  it('concurrent test 2', async ({ expect }) => {
    /* ... */
  });
  it.concurrent('concurrent test 3', async ({ expect }) => {
    /* ... */
  });
});

Sie können auch .skip, .only und .todo in gleichzeitigen Test-Suites und Tests verwenden. Lesen Sie mehr in der API-Referenz.

WARNING

Bei der Ausführung von Concurrent Tests müssen Snapshots und Assertions expect aus dem lokalen Testkontext verwenden. Dies stellt sicher, dass der richtige Test identifiziert wird.

Snapshot ​

Jest-kompatible Unterstützung für Snapshots.

ts
import { expect, it } from 'vitest';

it('renders correctly', () => {
  const result = render();
  expect(result).toMatchSnapshot();
});

Erfahren Sie mehr unter Snapshot.

Kompatibilität mit Chai und Jest expect ​

Chai ist für Assertions integriert, ebenso wie Jest expect-kompatible APIs.

Beachten Sie, dass test.globals auf true gesetzt werden sollte, um die Kompatibilität zu verbessern, wenn Sie Bibliotheken von Drittanbietern verwenden, die Matcher hinzufügen.

Mocking ​

Tinyspy ist für Mocking mit jest-kompatiblen APIs im vi-Objekt integriert.

ts
import { expect, vi } from 'vitest';

const fn = vi.fn();

fn('hello', 1);

expect(vi.isMockFunction(fn)).toBe(true);
expect(fn.mock.calls[0]).toEqual(['hello', 1]);

fn.mockImplementation(arg => arg);

fn('world', 2);

expect(fn.mock.results[1].value).toBe('world');

Vitest unterstützt sowohl happy-dom als auch jsdom für das Mocken von DOM- und Browser-APIs. Diese sind nicht in Vitest enthalten, daher müssen Sie sie möglicherweise installieren:

bash
$ npm i -D happy-dom
# or
$ npm i -D jsdom

Ändern Sie anschließend die environment-Option in Ihrer Konfigurationsdatei:

ts
// vitest.config.ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    environment: 'happy-dom', // or 'jsdom', 'node'
  },
});

Erfahren Sie mehr unter Mocking.

Code Coverage ​

Vitest unterstützt native Code Coverage über v8 und instrumentierte Code Coverage über istanbul.

json
{
  "scripts": {
    "test": "vitest",
    "coverage": "vitest run --coverage"
  }
}

Erfahren Sie mehr unter Codeabdeckung.

In-Source-Testing ​

Vitest bietet die Möglichkeit, Tests innerhalb Ihres Quellcodes zusammen mit der Implementierung auszuführen, ähnlich wie bei Rusts Modultests.

Dadurch teilen sich die Tests denselben Gültigkeitsbereich wie die Implementierungen. Private Zustände können getestet werden, ohne sie zu exportieren. Gleichzeitig wird die Feedbackschleife für die Entwicklung verkürzt.

ts
// src/index.ts

// die Implementierung
export function add(...args: number[]) {
  return args.reduce((a, b) => a + b, 0);
}

// In-Source-Testsuiten
if (import.meta.vitest) {
  const { it, expect } = import.meta.vitest;
  it('add', () => {
    expect(add()).toBe(0);
    expect(add(1)).toBe(1);
    expect(add(1, 2, 3)).toBe(6);
  });
}

Erfahren Sie mehr unter In-Source-Testing.

Benchmarking experimentell ​

Ab Vitest 0.23.0 können Sie Benchmark-Tests mit der bench-Funktion über Tinybench ausführen, um Leistungsergebnisse zu vergleichen.

ts
import { bench, describe } from 'vitest';

describe('sort', () => {
  bench('normal', () => {
    const x = [1, 5, 4, 2, 3];
    x.sort((a, b) => {
      return a - b;
    });
  });

  bench('reverse', () => {
    const x = [1, 5, 4, 2, 3];
    x.reverse().sort((a, b) => {
      return a - b;
    });
  });
});
Benchmark reportBenchmark report

Typtests experimental ​

Seit Vitest 0.25.0 können Sie Tests schreiben, um Typ-Regressionen abzufangen. Vitest wird mit dem expect-type-Paket ausgeliefert, um Ihnen eine ähnliche und leicht verständliche API bereitzustellen.

ts
import { assertType, expectTypeOf } from 'vitest';
import { mount } from './mount.js';

test('my types work properly', () => {
  expectTypeOf(mount).toBeFunction();
  expectTypeOf(mount).parameter(0).toMatchTypeOf<{ name: string }>();

  // @ts-expect-error name is a string
  assertType(mount({ name: 42 }));
});
Pager
Vorherige SeiteErste Schritte
Nächste SeiteArbeitsbereich

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors

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

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors