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

Codeabdeckung (Coverage) ​

Vitest unterstützt native Codeabdeckung über v8 und instrumentierte Codeabdeckung über istanbul.

Abdeckungsanbieter ​

TIP

Verfügbar seit Vitest v0.22.0

Sowohl v8 als auch istanbul sind optionale Abhängigkeiten. Standardmäßig wird der v8-Provider verwendet.

Sie können das Coverage-Tool auswählen, indem Sie test.coverage.provider auf v8 oder istanbul setzen:

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

export default defineConfig({
  test: {
    coverage: {
      provider: 'istanbul', // oder 'v8'
    },
  },
});

Beim ersten Start von Vitest mit aktivierter Codeabdeckung werden Sie automatisch aufgefordert, das entsprechende Paket zu installieren.

Alternativ können Sie diese auch manuell installieren:

bash
# Für v8
npm i -D @vitest/coverage-v8

# Für istanbul
npm i -D @vitest/coverage-istanbul

Konfiguration der Codeabdeckung ​

TIP

Es wird empfohlen, immer coverage.include in Ihrer Konfigurationsdatei zu definieren. Dies hilft Vitest, die Anzahl der von coverage.all ausgewählten Dateien zu reduzieren.

Um Tests mit aktivierter Codeabdeckung auszuführen, verwenden Sie das Flag --coverage in der CLI. Standardmäßig werden die Reporter ['text', 'html', 'clover', 'json'] verwendet.

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

Um dies zu konfigurieren, setzen Sie die Option test.coverage in Ihrer Konfigurationsdatei.

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

export default defineConfig({
  test: {
    coverage: {
      reporter: ['text', 'json', 'html'],
    },
  },
});

Benutzerdefinierter Coverage-Reporter ​

Sie können benutzerdefinierte Coverage-Reporter verwenden, indem Sie entweder den Namen des Pakets oder den absoluten Pfad in test.coverage.reporter übergeben:

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

export default defineConfig({
  test: {
    coverage: {
      reporter: [
        // Reporter über den Namen des NPM-Pakets angeben
        ['@vitest/custom-coverage-reporter', { someOption: true }],

        // Reporter über den lokalen Pfad angeben
        '/absolute/path/to/custom-reporter.cjs',
      ],
    },
  },
});

Benutzerdefinierte Reporter werden von Istanbul geladen und müssen mit dessen Reporter-Schnittstelle übereinstimmen. Eine Referenz finden Sie in der Implementierung integrierter Reporter.

js
// custom-reporter.cjs
const { ReportBase } = require('istanbul-lib-report');

module.exports = class CustomReporter extends ReportBase {
  constructor(opts) {
    super();

    // Hier sind die aus der Konfiguration übergebenen Optionen verfügbar
    this.file = opts.file;
  }

  onStart(root, context) {
    this.contentWriter = context.writer.writeFile(this.file);
    this.contentWriter.println('Start of custom coverage report');
  }

  onEnd() {
    this.contentWriter.println('End of custom coverage report');
    this.contentWriter.close();
  }
};

Benutzerdefinierter Coverage-Anbieter ​

Sie können auch einen eigenen Coverage-Anbieter bereitstellen, indem Sie 'custom' in test.coverage.provider angeben:

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

export default defineConfig({
  test: {
    coverage: {
      provider: 'custom',
      customProviderModule: 'my-custom-coverage-provider',
    },
  },
});

Benutzerdefinierte Anbieter benötigen die Option customProviderModule, die einen Modulnamen oder -pfad angibt, von dem das CoverageProviderModule geladen wird. Es muss ein Objekt exportiert werden, das das Interface CoverageProviderModule als Standardexport implementiert:

ts
// my-custom-coverage-provider.ts
import type {
  CoverageProvider,
  CoverageProviderModule,
  ResolvedCoverageOptions,
  Vitest,
} from 'vitest';

const CustomCoverageProviderModule: CoverageProviderModule = {
  getProvider(): CoverageProvider {
    return new CustomCoverageProvider();
  },

  // Implementiert den Rest des CoverageProviderModule ...
};

class CustomCoverageProvider implements CoverageProvider {
  name = 'custom-coverage-provider';
  options!: ResolvedCoverageOptions;

  initialize(ctx: Vitest) {
    this.options = ctx.config.coverage;
  }

  // Implementiert den Rest des CoverageProvider ...
}

export default CustomCoverageProviderModule;

Weitere Informationen finden Sie in der Typdefinition.

Ändern des Standard-Speicherorts für den Coverage-Ordner ​

Standardmäßig wird der coverage-Ordner im Stammverzeichnis Ihres Projekts erstellt, wenn Sie einen Coverage-Bericht ausführen. Um ihn in ein anderes Verzeichnis zu verschieben, verwenden Sie die Eigenschaft test.coverage.reportsDirectory in der Datei vite.config.js.

js
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    coverage: {
      reportsDirectory: './tests/unit/coverage',
    },
  },
});

Code ignorieren ​

Beide Coverage-Anbieter bieten verschiedene Möglichkeiten, um Code in Coverage-Berichten auszuschließen:

  • v8
  • istanbul

Bei Verwendung von TypeScript werden die Quellcodes mit esbuild transpiliert, wodurch alle Kommentare aus den Quellcodes entfernt werden (esbuild#516). Kommentare, die als legale Kommentare gelten, bleiben erhalten.

Für den istanbul-Anbieter können Sie das Schlüsselwort @preserve in den Ignore-Hinweis aufnehmen. Beachten Sie, dass diese Ignore-Hinweise auch im endgültigen Produktions-Build enthalten sein können.

diff
-/* istanbul ignore if */
+/* istanbul ignore if -- @preserve */
if (condition) {

Für v8 entstehen dadurch keine Probleme. Sie können v8 ignore-Kommentare wie gewohnt in Typescript verwenden:

ts
/* v8 ignore next 3 */
if (condition) {

Weitere Optionen ​

Eine vollständige Liste der konfigurierbaren Optionen für die Codeabdeckung finden Sie in der Coverage-Konfigurationsreferenz.

Vitest UI ​

Seit Vitest 0.31.0 können Sie Ihren Coverage-Bericht in der Vitest UI einsehen.

Die Vitest UI zeigt den Coverage-Bericht an, wenn dieser explizit aktiviert wurde und der HTML-Coverage-Reporter vorhanden ist. Andernfalls ist er nicht verfügbar:

  • Aktivieren Sie coverage.enabled=true in Ihrer Konfiguration oder führen Sie Vitest mit dem Flag --coverage.enabled=true aus.
  • Fügen Sie html zur coverage.reporter-Liste hinzu. Optional können Sie die Option subdir aktivieren, um den Coverage-Bericht in einem Unterverzeichnis zu speichern.
html coverage activation in Vitest UIhtml coverage activation in Vitest UIhtml coverage in Vitest UIhtml coverage in Vitest UI
Pager
Vorherige SeiteReporter
Nächste SeiteSnapshot

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors

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

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors