工作區
Vitest 透過工作區設定檔提供對單一儲存庫的內建支援。你可以建立一個工作區來定義專案的設定。
定義工作區
工作區應在其根目錄(如果有的話,與設定檔在同一個資料夾)中有一個 vitest.workspace
或 vitest.projects
檔。Vitest 支援此檔的 ts
/js
/json
副檔名。
工作區設定檔應具有預設匯出,其中包含檔案或 glob 模式清單,用於參照您的專案。例如,如果您有一個名為 packages
的資料夾,其中包含您的專案,您可以使用這個設定檔定義一個工作區
export default [
'packages/*'
]
即使 packages
中的每個資料夾內沒有設定檔,Vitest 仍會將其視為個別專案。
警告
除非在此設定檔中指定,否則 Vitest 不會將根設定檔視為工作區專案(因此不會執行在 include
中指定的測試)。
您也可以使用其設定檔參照專案
export default [
'packages/*/vitest.config.{e2e,unit}.ts'
]
此模式只會包含具有 vitest.config
檔案的專案,且該檔案在副檔名前包含 e2e
和 unit
。
警告
如果您使用 glob 模式參照檔案名稱,請確保您的設定檔以 vite.config
或 vitest.config
開頭。否則 Vitest 會略過它。
您也可以使用內嵌設定檔定義專案。工作區檔案同時支援使用這兩種語法。
import { } from 'vitest/config'
// defineWorkspace provides a nice type hinting DX
export default ([
'packages/*',
{
// add "extends" to merge two configs together
: './vite.config.js',
: {
: ['tests/**/*.{browser}.test.{ts,js}'],
// it is recommended to define a name when using inline configs
: 'happy-dom',
: 'happy-dom',
}
},
{
: {
: ['tests/**/*.{node}.test.{ts,js}'],
: 'node',
: 'node',
}
}
])
警告
所有專案都應具有唯一名稱。否則,Vitest 會擲回錯誤。如果您沒有在內嵌設定檔中提供名稱,Vitest 會指定一個數字。如果您沒有在使用 glob 語法定義的專案設定檔中提供名稱,Vitest 會預設使用目錄名稱。
如果您不依賴內嵌設定檔,您可以在根目錄中建立一個小型 json 檔案
[
"packages/*"
]
工作區專案不支援所有設定屬性。為了更好的類型安全性,請在專案設定檔中使用 defineProject
方法,而不是 defineConfig
方法
import { } from 'vitest/config'
export default ({
: {
: 'jsdom',
// "reporters" is not supported in a project config,
// so it will show an error
: ['json']
}
})
執行測試
若要在工作區內執行測試,請在根目錄的 package.json
中定義一個指令碼
{
"scripts": {
"test": "vitest"
}
}
現在可以使用您的套件管理員執行測試
npm run test
yarn test
pnpm run test
bun test
如果您只需要在單一專案中執行測試,請使用 --project
CLI 選項
npm run test --project e2e
提示
CLI 選項 --project
可以使用多次來篩選出多個專案
npm 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',
}
})
)
此外,某些設定選項不允許在專案設定中使用。最顯著的是
coverage
:涵蓋範圍是針對整個工作區進行reporters
:僅支援根層級的報告者resolveSnapshotPath
:僅尊重根層級的解析器- 所有其他不會影響測試執行器的選項
提示
所有在專案設定中不受支援的設定選項,在 "設定" 頁面上會在它們旁邊標示 * 符號。
涵蓋範圍
工作區專案的涵蓋範圍開箱即用。但如果您啟用了 all
選項,並在某些專案中使用非傳統擴充功能,您需要在根設定檔中有一個處理此擴充功能的外掛程式。
例如,如果您有一個使用 Vue 檔案的套件,並且它有自己的設定檔,但某些檔案未匯入測試中,涵蓋範圍將無法分析未使用的檔案的使用情況,因為它依賴於根設定,而不是專案設定。