Skip to content
Vitest 1
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 參考文件

模擬函數

Vi

expect

expectTypeOf

assert

assertType

配置

管理 Vitest 配置文件

配置 Vitest

本頁導覽

工作區 ​

範例專案

GitHub - 線上執行

Vitest 透過工作區設定檔,提供對 monorepo(單一儲存庫)的內建支援。您可以建立一個工作區來定義專案的設定。

定義工作區 ​

工作區的根目錄中應包含 vitest.workspace 或 vitest.projects 檔案(若有設定檔,則應位於同一資料夾)。Vitest 支援此檔案的 ts/js/json 副檔名。

工作區設定檔應有一個預設導出,包含引用您專案的檔案或 glob 樣式的清單。例如,如果您有一個名為 packages 的資料夾,其中包含您的專案,您可以使用此設定檔定義一個工作區:

ts
export default ['packages/*'];

即使 packages 中的資料夾沒有設定檔,Vitest 仍會將其視為個別專案。

WARNING

除非在此設定中指定,否則 Vitest 不會將根設定視為工作區專案(因此不會執行 include 中指定的測試)。

您也可以使用專案的設定檔來引用專案:

ts
export default ['packages/*/vitest.config.{e2e,unit}.ts'];

此模式僅會包含檔名為 vitest.config,且副檔名前包含 e2e 或 unit 的專案。

WARNING

若使用 glob 模式引用檔案名稱,請確保設定檔以 vite.config 或 vitest.config 開頭,否則 Vitest 將會略過。

您也可以使用行內設定定義專案。工作區檔案同時支援這兩種語法。

ts
import { defineWorkspace } from 'vitest/config';

// defineWorkspace 提供良好的類型提示開發者體驗(DX)
export default defineWorkspace([
  'packages/*',
  {
    // 使用 "extends" 合併兩個設定
    extends: './vite.config.js',
    test: {
      include: ['tests/**/*.{browser}.test.{ts,js}'],
      // 建議在使用行內設定時定義名稱
      name: 'happy-dom',
      environment: 'happy-dom',
    },
  },
  {
    test: {
      include: ['tests/**/*.{node}.test.{ts,js}'],
      name: 'node',
      environment: 'node',
    },
  },
]);

WARNING

所有專案都應該有唯一的名稱。否則,Vitest 將會拋出錯誤。如果您沒有在行內設定中提供名稱,Vitest 將會分配一個數字。若未使用 glob 語法定義專案設定,且未提供名稱,Vitest 預設會使用目錄名稱。

如果您不依賴行內設定,只需在根目錄中建立一個小的 json 檔案:

json
["packages/*"]

工作區專案不支援所有的設定屬性。為了更好的類型安全,請在專案設定檔中使用 defineProject 而不是 defineConfig 方法:

ts
import { defineProject } from 'vitest/config';

export default defineProject({
  test: {
    environment: 'jsdom',
    // "reporters" 在專案設定中不受支援,
    // 因此它會顯示一個錯誤
    reporters: ['json'],
  },
});

執行測試 ​

若要在工作區內執行測試,請在根目錄的 package.json 中定義 script:

json
{
  "scripts": {
    "test": "vitest"
  }
}

現在可以使用您的套件管理工具來執行測試:

bash
npm run test
bash
yarn test
bash
pnpm run test
bash
bun test

如果您只需在單個專案中執行測試,請使用 --project CLI 選項:

bash
npm run test --project e2e

TIP

CLI 選項 --project 可以多次使用,以篩選出多個專案:

bash
npm run test --project e2e --project unit

設定 ​

所有設定選項皆不會從根層級設定檔繼承。您可以建立一個共享的設定檔,並將其與專案設定合併:

ts
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';

export default mergeConfig(
  configShared,
  defineProject({
    test: {
      environment: 'jsdom',
    },
  })
);

此外,某些設定選項在專案設定中是不允許的。最值得注意的是:

  • coverage:coverage 是為整個工作區完成的
  • reporters:僅支援根層級的 reporter
  • resolveSnapshotPath:僅採用根層級的 resolver
  • 所有其他不影響測試運行器的選項

TIP

所有在專案設定中不受支援的設定選項,在 "Config" 頁面中都有 * 標記。

覆蓋率 ​

工作區專案的覆蓋率功能可正常運作。但是,如果您啟用了 all 選項,並且在某些專案中使用了非傳統的副檔名,您需要在根設定檔中加入處理此副檔名的外掛。

例如,如果您有一個使用 Vue 檔案的套件,並且它有自己的設定檔,但是某些檔案沒有在您的測試中匯入,覆蓋率功能將會失敗,因為它依賴根設定而非專案設定,嘗試分析未使用檔案的情況。

Pager
上一頁功能特性
下一頁命令列界面

以 MIT 授權條款 發布。

版權所有 (c) 2024 Mithril Contributors

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

以 MIT 授權條款 發布。

版權所有 (c) 2024 Mithril Contributors