Skip to content
Vitest 3
Main Navigation 指南 & API配置瀏覽器模式進階 API
3.2.0
2.1.9
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

快速入門

功能特色

配置參考

API

測試 API 參考

模擬函式

Vi

expect

expectTypeOf

assert

assertType

指南

命令列介面

測試篩選

測試專案

報告器

程式碼覆蓋率

快照

模擬(Mocking)

平行化

型別測試

Vitest UI

內聯測試

測試上下文

測試註解

測試環境

擴展匹配器

IDE 整合

偵錯

常見錯誤

遷移指南

遷移到 Vitest 3.0

從 Jest 遷移

效能

測試效能分析

提升效能

瀏覽器模式

進階 API

與其他測試執行器的比較

本頁導覽

測試專案 ​

範例專案

GitHub - 線上執行

WARNING

此功能曾被稱為 workspace。workspace 自 3.2 版起已棄用,並由 projects 配置取代。兩者功能相同。

Vitest 提供了一種在單一 Vitest 程序中定義多個專案配置的方法。此功能對於 Monorepo 結構特別有用,但也可以用於執行具有不同配置的測試,例如 resolve.alias、plugins 或 test.browser 等。

定義專案 ​

您可以在根 配置 中定義專案:

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

export default defineConfig({
  test: {
    projects: ['packages/*'],
  },
});

專案配置可以是行內配置、檔案,或引用您專案的 glob 模式。例如,如果您有一個名為 packages 的資料夾,其中包含您的專案,您可以在根 Vitest 配置中定義一個陣列:

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

export default defineConfig({
  test: {
    projects: ['packages/*'],
  },
});

Vitest 會將 packages 中的每個資料夾視為一個獨立的專案,即使其內部沒有配置文件。如果此 glob 模式匹配任何檔案,它將被視為 Vitest 配置,即使其名稱中沒有 vitest 或具有不常見的副檔名。

WARNING

Vitest 不會將根 vitest.config 檔案視為專案,除非它在配置中明確指定。因此,根配置只會影響全域選項,例如 reporters 和 coverage。請注意,Vitest 始終會執行根配置檔案中指定的某些插件掛鉤,例如 apply、config、configResolved 或 configureServer。Vitest 還使用相同的插件來執行全域設定和自訂覆蓋率供應器。

您也可以使用其配置檔案來引用專案:

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

export default defineConfig({
  test: {
    projects: ['packages/*/vitest.config.{e2e,unit}.ts'],
  },
});

此模式將只包含具有 vitest.config 檔案,且其名稱在副檔名之前包含 e2e 或 unit 的專案。

您也可以使用行內配置來定義專案。此配置同時支援兩種語法。

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

export default defineConfig({
  test: {
    projects: [
      // 符合 `packages` 資料夾內的所有資料夾和檔案
      'packages/*',
      {
        // 添加 "extends: true" 以繼承根配置中的選項
        extends: true,
        test: {
          include: ['tests/**/*.{browser}.test.{ts,js}'],
          // 建議在使用行內配置時定義名稱
          name: 'happy-dom',
          environment: 'happy-dom',
        },
      },
      {
        test: {
          include: ['tests/**/*.{node}.test.{ts,js}'],
          // 名稱標籤的顏色可以變更
          name: { label: 'node', color: 'green' },
          environment: 'node',
        },
      },
    ],
  },
});

WARNING

所有專案都必須具有唯一的名稱;否則,Vitest 將會產生錯誤。如果在行內配置中未提供名稱,Vitest 將會分配一個數字。對於使用 glob 語法定義的專案配置,Vitest 將預設使用最近的 package.json 檔案中的「name」屬性,如果不存在,則使用資料夾名稱。

專案不支援所有配置選項。為了提升類型安全,請在專案配置檔案中使用 defineProject 方法而不是 defineConfig:

ts
// @errors: 2769
import { defineProject } from 'vitest/config';

export default defineProject({
  test: {
    environment: 'jsdom',
    // 專案配置不支援 "reporters",
    // 因此會出現錯誤
    reporters: ['json'],
  },
});

執行測試 ​

若要執行測試,請在根 package.json 中定義一個指令:

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

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

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

若要只在單一專案中執行測試,請使用 --project CLI 選項:

bash
npm run test --project e2e
bash
yarn test --project e2e
bash
pnpm run test --project e2e
bash
bun run test --project e2e

TIP

CLI 選項 --project 可以多次使用以過濾多個專案:

bash
npm run test --project e2e --project unit
bash
yarn test --project e2e --project unit
bash
pnpm run test --project e2e --project unit
bash
bun 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',
    },
  })
);

此外,您可以使用 extends 選項從根級別配置繼承。所有選項都會被合併。

ts
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  test: {
    pool: 'threads',
    projects: [
      {
        // 會繼承此配置中的選項,例如 plugins 和 pool
        extends: true,
        test: {
          name: 'unit',
          include: ['**/*.unit.test.ts'],
        },
      },
      {
        // 不會繼承此配置的任何選項
        // 這是預設行為
        extends: false,
        test: {
          name: 'integration',
          include: ['**/*.integration.test.ts'],
        },
      },
    ],
  },
});

不支援的選項

某些配置選項不適用於專案配置。最值得注意的是:

  • coverage:覆蓋率是針對整個程序完成的
  • reporters:只支援根級別的報告工具
  • resolveSnapshotPath:只會採用根級別的解析器
  • 所有其他不影響測試執行器的選項

所有在專案配置中不被支援的配置選項,在「配置」指南中都標有 * 標記。它們必須在根配置檔案中定義一次。

Pager
上一頁測試篩選
下一頁報告器

以 MIT 授權條款 發布。

版權所有 (c) 2021-Present Vitest Team

https://vitest.dev/guide/projects

以 MIT 授權條款 發布。

版權所有 (c) 2021-Present Vitest Team