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:
// vite.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:
# Für v8
npm i -D @vitest/coverage-v8
# Für istanbul
npm i -D @vitest/coverage-istanbul
Konfiguration der Codeabdeckung
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.
{
"scripts": {
"test": "vitest",
"coverage": "vitest run --coverage"
}
}
Um dies zu konfigurieren, setzen Sie die Option test.coverage
in Ihrer Konfigurationsdatei.
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
reporter: ['text', 'json', 'html'],
},
},
});
Benutzerdefinierter Coverage-Anbieter
Sie können auch einen eigenen Coverage-Anbieter bereitstellen, indem Sie 'custom'
in test.coverage.provider
angeben:
// vite.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:
// 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
.
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:
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.
-/* istanbul ignore if */
+/* istanbul ignore if -- @preserve */
if (condition) {
Für v8
entstehen dadurch keine Probleme. Sie können c8 ignore
-Kommentare wie gewohnt in Typescript verwenden:
/* c8 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
zurcoverage.reporters
-Liste hinzu. Optional können Sie die Optionsubdir
aktivieren, um den Coverage-Bericht in einem Unterverzeichnis zu speichern.



