Skip to content
Vitest 0
Main Navigation 指南API配置高級
1.6.1
0.34.6

繁體中文

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

繁體中文

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

外觀

Sidebar Navigation

指南

為什麼使用 Vitest

開始使用

功能特性

工作區

命令列界面

測試過濾器

覆蓋率

快照

模擬(Mocking)

型別測試

Vitest UI

瀏覽器模式 (實驗性)

原始碼測試

測試上下文

測試環境

擴展匹配器

IDE 整合支援

偵錯

與其他測試執行器的比較

遷移指南

常見錯誤

API

測試 API 參考文件

模擬函數 (Mock Functions)

Vi

expect

expectTypeOf

assertType

配置

配置 Vitest

本頁導覽

覆蓋率 ​

Vitest 透過 v8 支援原生程式碼覆蓋率,並透過 istanbul 支援儀器化程式碼覆蓋率。

覆蓋率工具 ​

TIP

自 Vitest v0.22.0 起

v8 和 istanbul 支援是可選的。預設情況下會使用 v8。

您可以透過將 test.coverage.provider 設定為 v8 或 istanbul 來選擇覆蓋率工具:

ts
// vite.config.ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    coverage: {
      provider: 'istanbul', // or 'v8'
    },
  },
});

當您啟動 Vitest 程序時,它會自動提示您安裝相應的支援套件。

或者,如果您希望手動安裝它們:

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

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

覆蓋率設定 ​

要啟用覆蓋率測試,您可以在 CLI 中傳遞 --coverage 標記。 預設情況下,將使用 reporter ['text', 'html', 'clover', 'json']。

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

要進行配置,請在您的設定檔中設定 test.coverage 選項:

ts
// vite.config.ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    coverage: {
      reporter: ['text', 'json', 'html'],
    },
  },
});

自定義覆蓋率提供者 ​

也可以透過在 test.coverage.provider 中傳遞 'custom' 來提供您自己的自定義覆蓋率提供者:

ts
// vite.config.ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    coverage: {
      provider: 'custom',
      customProviderModule: 'my-custom-coverage-provider',
    },
  },
});

自定義提供者需要一個 customProviderModule 選項,這是一個模組名稱或路徑,用於加載 CoverageProviderModule。它必須導出一個物件,該物件將 CoverageProviderModule 實現為預設導出:

ts
// my-custom-coverage-provider.ts
import type {
  CoverageProvider,
  CoverageProviderModule,
  ResolvedCoverageOptions,
  Vitest,
} from 'vitest';

const CustomCoverageProviderModule: CoverageProviderModule = {
  getProvider(): CoverageProvider {
    return new CustomCoverageProvider();
  },

  // Implements rest of the CoverageProviderModule ...
};

class CustomCoverageProvider implements CoverageProvider {
  name = 'custom-coverage-provider';
  options!: ResolvedCoverageOptions;

  initialize(ctx: Vitest) {
    this.options = ctx.config.coverage;
  }

  // Implements rest of the CoverageProvider ...
}

export default CustomCoverageProviderModule;

請參考類型定義以獲取更多詳細資訊。

更改預設覆蓋率資料夾位置 ​

執行覆蓋率報告時,會在專案根目錄建立一個 coverage 資料夾。如果您想將其移動到不同的目錄,請使用 vite.config.js 檔案中的 test.coverage.reportsDirectory 屬性。

js
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    coverage: {
      reportsDirectory: './tests/unit/coverage',
    },
  },
});

忽略程式碼 ​

兩種覆蓋率提供器各有其方法來忽略覆蓋率報告中的程式碼:

  • v8
  • ìstanbul

使用 TypeScript 時,原始碼會透過 esbuild 轉換,這會移除所有註釋 (esbuild#516)。 被視為 legal comments 的註釋會被保留。

對於 istanbul 提供者,您可以在忽略提示中包含 @preserve 關鍵字。 請注意,這些忽略提示現在也可能包含在最終產品建置中。

diff
-/* istanbul ignore if */
+/* istanbul ignore if -- @preserve */
if (condition) {

對於 v8,這不會造成問題。您可以像往常一樣將 c8 ignore 註釋與 Typescript 一起使用:

ts
/* c8 ignore next 3 */
if (condition) {

其他選項 ​

要查看所有可配置的覆蓋率選項,請參閱 覆蓋率配置參考。

Vitest UI ​

自 Vitest 0.31.0 起,您可以在 Vitest UI 中查看您的覆蓋率報告。

當明確啟用覆蓋率報告,且存在 html 覆蓋率 reporter 時,Vitest UI 將啟用覆蓋率報告,否則將不可用:

  • 在您的配置中啟用 coverage.enabled=true,或使用 --coverage.enabled=true 標記運行 Vitest
  • 將 html 新增至 coverage.reporters 列表中;您還可以啟用 subdir 選項,以將覆蓋率報告放入子目錄中
html coverage activation in Vitest UIhtml coverage activation in Vitest UIhtml coverage in Vitest UIhtml coverage in Vitest UI
Pager
上一頁測試過濾器
下一頁快照

以 MIT 授權條款 發布。

版權所有 (c) 2024 Mithril Contributors

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

以 MIT 授權條款 發布。

版權所有 (c) 2024 Mithril Contributors