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-istanbulNastavení 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=trueve vaší konfiguraci nebo spusťte Vitest s přepínačem--coverage.enabled=true. - Přidejte
htmldo seznamucoverage.reporters: můžete také povolit volbusubdirpro umístění reportu pokrytí do podadresáře.



