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:
// vitest.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í
TIP
Doporučuje se vždy definovat coverage.include v konfiguračním souboru. Pomůže to Vitestu snížit počet souborů vybraných pomocí coverage.all.
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:
// vitest.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
reporter: ['text', 'json', 'html'],
},
},
});Vlastní reportér pokrytí
Vlastní reportéry pokrytí můžete používat tak, že do test.coverage.reporter předáte buď název balíčku, nebo absolutní cestu:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
reporter: [
// Určete reportér pomocí názvu balíčku NPM
['@vitest/custom-coverage-reporter', { someOption: true }],
// Určete reportér pomocí lokální cesty
'/absolute/path/to/custom-reporter.cjs',
],
},
},
});Vlastní reportéry jsou načítány nástrojem Istanbul a musí odpovídat jeho rozhraní reportérů. Odkaz naleznete v implementaci vestavěných reportérů.
// custom-reporter.cjs
const { ReportBase } = require('istanbul-lib-report');
module.exports = class CustomReporter extends ReportBase {
constructor(opts) {
super();
// Možnosti předané z konfigurace jsou k dispozici zde
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();
}
};Vlastní poskytovatel pokrytí
Je také možné použít vlastního poskytovatele pokrytí nastavením volby test.coverage.provider na 'custom':
// vitest.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 v8 ignore s Typescriptem jako obvykle:
/* v8 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.reporter: můžete také povolit volbusubdirpro umístění reportu pokrytí do podadresáře.



