Skip to content
Vitest 1
Main Navigation PrůvodceAPIKonfiguracePokročilý
1.6.1
0.34.6

čeština

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
magyar

čeština

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
magyar

Vzhled

Sidebar Navigation

Průvodce

Proč Vitest

Začínáme

Funkce

Workspace

Rozhraní příkazového řádku

Filtrování testů

Reportéři

Pokrytí

Snímky

Mockování

Testování typů

Vitest UI

Režim prohlížeče

Testování ve zdrojovém kódu

Kontext testu

Testovací prostředí

Rozšíření matcherů/porovnávačů

Integrace do IDE

Ladění

Srovnání s jinými testovacími nástroji

Průvodce migrací

Běžné chyby

Zvýšení výkonu

API

Referenční příručka k Test API

Mock funkce

Vi

expect

expectTypeOf

assert

assertType

Konfigurace

Správa konfiguračního souboru pro Vitest

Konfigurace Vitest

Na této stránce

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:

ts
// 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ě:

bash
# Pro v8
npm i -D @vitest/coverage-v8

# Pro istanbul
npm i -D @vitest/coverage-istanbul

Nastavení 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'].

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

Pro konfiguraci reportérů použijte volbu test.coverage v konfiguračním souboru:

ts
// 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:

ts
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ů.

js
// 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':

ts
// 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:

ts
// 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.

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í:

  • v8
  • ìstanbul

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.

diff
-/* 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:

ts
/* 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=true ve vaší konfiguraci nebo spusťte Vitest s přepínačem --coverage.enabled=true.
  • Přidejte html do seznamu coverage.reporter: můžete také povolit volbu subdir pro umístění reportu pokrytí do podadresáře.
html coverage activation in Vitest UIhtml coverage activation in Vitest UIhtml coverage in Vitest UIhtml coverage in Vitest UI
Pager
Předchozí stránkaReportéři
Další stránkaSnímky

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors

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

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors