測試專案
WARNING
此功能曾被稱為 workspace
。workspace
自 3.2 版起已棄用,並由 projects
配置取代。兩者功能相同。
Vitest 提供了一種在單一 Vitest 程序中定義多個專案配置的方法。此功能對於 Monorepo 結構特別有用,但也可以用於執行具有不同配置的測試,例如 resolve.alias
、plugins
或 test.browser
等。
定義專案
您可以在根 配置 中定義專案:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*'],
},
});
專案配置可以是行內配置、檔案,或引用您專案的 glob 模式。例如,如果您有一個名為 packages
的資料夾,其中包含您的專案,您可以在根 Vitest 配置中定義一個陣列:
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 還使用相同的插件來執行全域設定和自訂覆蓋率供應器。
您也可以使用其配置檔案來引用專案:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*/vitest.config.{e2e,unit}.ts'],
},
});
此模式將只包含具有 vitest.config
檔案,且其名稱在副檔名之前包含 e2e
或 unit
的專案。
您也可以使用行內配置來定義專案。此配置同時支援兩種語法。
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
:
// @errors: 2769
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// 專案配置不支援 "reporters",
// 因此會出現錯誤
reporters: ['json'],
},
});
執行測試
若要執行測試,請在根 package.json
中定義一個指令:
{
"scripts": {
"test": "vitest"
}
}
現在可以使用您的套件管理工具執行測試:
npm run test
yarn test
pnpm run test
bun run test
若要只在單一專案中執行測試,請使用 --project
CLI 選項:
npm run test --project e2e
yarn test --project e2e
pnpm run test --project e2e
bun run test --project e2e
TIP
CLI 選項 --project
可以多次使用以過濾多個專案:
npm run test --project e2e --project unit
yarn test --project e2e --project unit
pnpm run test --project e2e --project unit
bun run test --project e2e --project unit
配置
根級別配置檔案中的配置選項皆不會被繼承。您可以建立一個共用配置檔案並自行將其與專案配置合併:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
此外,您可以使用 extends
選項從根級別配置繼承。所有選項都會被合併。
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
:只會採用根級別的解析器- 所有其他不影響測試執行器的選項
所有在專案配置中不被支援的配置選項,在「配置」指南中都標有 * 標記。它們必須在根配置檔案中定義一次。