Pokrytí
Vitest nativně podporuje pokrytí kódu pomocí v8
a instrumentované pokrytí kódu pomocí istanbul
.
Poskytovatelé pokrytí
TIP
Od verze Vitest 0.22.0
Podpora v8
i istanbul
je volitelná. Ve výchozím nastavení se používá v8
.
Můžete si vybrat nástroj pro pokrytí nastavením volby test.coverage.provider
na v8
nebo istanbul
:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
provider: 'istanbul', // nebo 'v8'
},
},
});
Když spustíte Vitest, automaticky se zobrazí výzva k instalaci odpovídajícího balíčku pro podporu pokrytí.
Nebo můžete balíček nainstalovat ručně:
# Pro v8
npm i -D @vitest/coverage-v8
# Pro istanbul
npm i -D @vitest/coverage-istanbul
Nastavení pokrytí
Pro spuštění testů s povoleným pokrytím použijte v příkazovém řádku (CLI) přepínač --coverage
. Ve výchozím nastavení se použijí reportéry ['text', 'html', 'clover', 'json']
.
{
"scripts": {
"test": "vitest",
"coverage": "vitest run --coverage"
}
}
Pro konfiguraci reportérů použijte volbu test.coverage
v konfiguračním souboru:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
reporter: ['text', 'json', 'html'],
},
},
});
Vlastní poskytovatel pokrytí
Je také možné použít vlastního poskytovatele pokrytí nastavením volby test.coverage.provider
na 'custom'
:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
provider: 'custom',
customProviderModule: 'my-custom-coverage-provider',
},
},
});
Vlastní poskytovatelé vyžadují volbu customProviderModule
, která určuje název modulu nebo cestu k modulu, ze kterého se má načíst CoverageProviderModule
. Tento modul musí exportovat objekt, který implementuje rozhraní CoverageProviderModule
jako výchozí export:
// my-custom-coverage-provider.ts
import type {
CoverageProvider,
CoverageProviderModule,
ResolvedCoverageOptions,
Vitest,
} from 'vitest';
const CustomCoverageProviderModule: CoverageProviderModule = {
getProvider(): CoverageProvider {
return new CustomCoverageProvider();
},
// Implementace zbytku CoverageProviderModule ...
};
class CustomCoverageProvider implements CoverageProvider {
name = 'custom-coverage-provider';
options!: ResolvedCoverageOptions;
initialize(ctx: Vitest) {
this.options = ctx.config.coverage;
}
// Implementace zbytku CoverageProvider ...
}
export default CustomCoverageProviderModule;
Pro více informací se podívejte na definici typu.
Změna výchozího umístění složky s reporty pokrytí
Při generování reportu pokrytí se vytvoří složka coverage
v kořenovém adresáři projektu. Pokud chcete složku umístit do jiného adresáře, použijte vlastnost test.coverage.reportsDirectory
v souboru vite.config.js
.
import { defineConfig } from 'vite';
export default defineConfig({
test: {
coverage: {
reportsDirectory: './tests/unit/coverage',
},
},
});
Ignorování kódu
Oba poskytovatelé pokrytí mají své vlastní způsoby, jak vyloučit kód z reportů pokrytí:
Při použití TypeScript se zdrojové kódy transpilují pomocí esbuild
, který ze zdrojových kódů odstraňuje všechny komentáře (esbuild#516). Zachovány jsou pouze komentáře, které jsou považovány za právní komentáře.
Pro poskytovatele istanbul
můžete do nápovědy pro ignorování zahrnout klíčové slovo @preserve
. Upozorňujeme, že tyto instrukce pro ignorování mohou být zahrnuty i v produkční verzi.
-/* istanbul ignore if */
+/* istanbul ignore if -- @preserve */
if (condition) {
Pro v8
to nezpůsobuje žádné problémy. Můžete používat komentáře c8 ignore
s Typescriptem jako obvykle:
/* c8 ignore next 3 */
if (condition) {
Další možnosti
Pro zobrazení všech konfigurovatelných možností pokrytí viz Referenční příručka pro konfiguraci pokrytí.
Vitest UI
Od verze Vitest 0.31.0 můžete zkontrolovat report pokrytí v Vitest UI.
Vitest UI zobrazí report pokrytí, pokud je explicitně povoleno a je přítomen reportér pokrytí ve formátu HTML. Jinak nebude k dispozici.
- Povolte
coverage.enabled=true
ve vaší konfiguraci nebo spusťte Vitest s přepínačem--coverage.enabled=true
. - Přidejte
html
do seznamucoverage.reporters
: můžete také povolit volbusubdir
pro umístění reportu pokrytí do podadresáře.



