配置 Vitest
配置
vitest 會讀取您根目錄下的 vite.config.ts(如果存在),以匹配您的 Vite 應用程式的插件和設定。如果您希望為測試使用不同的配置,或者您的主要應用程式不特別依賴 Vite,您可以選擇:
- 建立
vitest.config.ts,其優先級更高,並覆蓋vite.config.ts中的配置。 - 將
--config選項傳遞給 CLI,例如vitest --config ./path/to/vitest.config.ts。 - 使用
process.env.VITEST或defineConfig上的mode屬性(如果未覆蓋,將設定為test/benchmark),以便在vite.config.ts中有條件地應用不同的配置。
要配置 vitest 本身,請在您的 Vite 配置中添加 test 屬性。如果您從 vite 匯入 defineConfig,您還需要在您的配置檔案頂部使用 三斜線指令 以添加對 Vitest 類型的引用。
使用來自 vite 的 defineConfig,您應該遵循以下格式:
/// <reference types="vitest" />
import { defineConfig } from 'vite';
export default defineConfig({
test: {
// ...
},
});使用來自 vitest/config 的 defineConfig,您應該遵循以下格式:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
// ...
},
});您可以取得 Vitest 的預設選項,以便在需要時進行擴充:
import { configDefaults, defineConfig } from 'vitest/config';
export default defineConfig({
test: {
exclude: [...configDefaults.exclude, 'packages/template/*'],
},
});當使用獨立的 vitest.config.js 時,如有需要,您還可以從另一個配置檔案擴充 Vite 的選項:
import { defineConfig, mergeConfig } from 'vitest/config';
import viteConfig from './vite.config';
export default mergeConfig(
viteConfig,
defineConfig({
test: {
exclude: ['packages/template/*'],
},
})
);WARNING
自 v0.30.0 起,mergeConfig 輔助函數已在 Vitest 中提供。如果您使用較低版本,可以直接從 vite 匯入它。
如果您的 vite 配置被定義為一個函數,您可以像這樣定義配置:
import { defineConfig, mergeConfig } from 'vitest/config';
import viteConfig from './vite.config';
export default defineConfig(configEnv =>
mergeConfig(
viteConfig(configEnv),
defineConfig({
test: {
exclude: ['packages/template/*'],
},
})
)
);選項
TIP
除了以下選項外,您還可以從 Vite 使用任何配置選項。例如,使用 define 定義全域變數,或使用 resolve.alias 定義別名。
TIP
所有在 工作區 專案配置中不支援的配置選項旁邊都有 * 標識。
include
- 類型:
string[] - 預設值:
['**/*.{test,spec}.?(c|m)[jt]s?(x)']
要包含在測試運行中的檔案,使用 glob 樣式。
exclude
- 類型:
string[] - 預設值:
['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**', '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*']
要從測試運行中排除的檔案,使用 glob 樣式。
includeSource
- 類型:
string[] - 預設值:
[]
包含用於原始碼中測試檔案的 glob 樣式。
定義後,Vitest 將執行所有匹配的檔案,這些檔案內部包含 import.meta.vitest。
server
- 類型:
{ sourcemap?, deps?, ... } - 版本: 自 Vitest 0.34.0 起
Vite-Node 伺服器選項。
server.sourcemap
- 類型:
'inline' | boolean - 預設值:
'inline'
將內聯 sourcemap 注入到模組中。
server.debug
- 類型:
{ dumpModules?, loadDumppedModules? }
Vite-Node 偵錯器選項。
server.debug.dumpModules
- 類型:
boolean | string
將轉換後的模組傾印到檔案系統。傳遞字串將傾印到指定的路徑。
server.debug.loadDumppedModules
- 類型:
boolean
只要存在時,就從檔案系統讀取傾印的模組。通過修改檔案系統中的傾印結果,可用於偵錯。
server.deps
- 類型:
{ external?, inline?, ... }
處理依賴項解析。
server.deps.external
- 類型:
(string | RegExp)[] - 預設值:
[/\/node_modules\//]
外部化表示 Vite 將略過該套件到原生 Node.js。外部化的依賴項將不會應用於 Vite 的轉換器和解析器,因此它們不支援重新載入時的 HMR。預設情況下,node_modules 內的所有套件都會被外部化處理。
這些選項支援套件名稱,如同它們寫在 node_modules 中或在 deps.moduleDirectories 中指定的一樣。例如,位於 packages/some-name 內的套件 @company/some-name 應指定為 some-name,並且 packages 應包含在 deps.moduleDirectories 中。基本上,Vitest 始終檢查檔案路徑,而不是實際的套件名稱。
如果使用 regexp,Vitest 會在 檔案路徑 上應用於它,而不是套件名稱。
server.deps.inline
- 類型:
(string | RegExp)[] | true - 預設值:
[]
Vite 會處理內聯模組。這可能有助於處理以 ESM 格式傳送 .js 的套件(Node 無法處理)。
如果為 true,則每個依賴項都將被內聯。預設情況下,ssr.noExternal 中指定的所有依賴項都將被內聯。
server.deps.fallbackCJS
- 類型
boolean - 預設值:
false
當相依性是有效的 ESM 套件時,嘗試根據路徑推測 cjs 版本。如果依賴項的 ESM 文件不正確,這可能會有所幫助。
如果套件在 ESM 和 CJS 模式下具有不同的邏輯,這可能會導致一些不一致。
server.deps.cacheDir
- 類型
string - 預設值:
'node_modules/.vite'
用於儲存快取檔案的目錄。
deps
- 類型:
{ optimizer?, registerNodeLoader?, ... }
處理依賴項解析。
deps.optimizer
- 類型:
{ ssr?, web? } - 版本: 自 Vitest 0.34.0 起
- 另請參閱: 依賴項優化選項
啟用依賴項優化。如果您有很多測試,這可能會提高它們的效能。在 Vitest 0.34.0 之前,它被命名為 deps.experimentalOptimizer。
當 Vitest 遇到 include 中列出的外部函式庫時,它會使用 esbuild 將其打包成一個文件,並將其作為一個完整的模組匯入。這有很多好處:
- 匯入具有大量匯入的套件開銷很大。通過將它們打包到一個文件中,我們可以節省大量時間
- 匯入 UI 程式庫開銷很大,因為它們並非旨在在 Node.js 內部執行
- 您的
alias配置現在在打包的套件中被遵循 - 您的測試中的程式碼更接近于在瀏覽器中執行的程式碼
請注意,只有 deps.optimizer?.[mode].include 選項中的套件會被打包(某些插件會自動填充此選項,例如 Svelte)。您可以在 Vite 文件中閱讀有關可用選項的更多資訊(Vitest 不支援 disable 和 noDiscovery 選項)。預設情況下,Vitest 對於 jsdom 和 happy-dom 環境使用 optimizer.web,對於 node 和 edge 環境使用 optimizer.ssr,但可以通過 transformMode 進行配置。
該選項還會繼承您的 optimizeDeps 配置(對於 web,Vitest 將擴展 optimizeDeps,對於 ssr,則擴展 ssr.optimizeDeps)。如果您在 deps.optimizer 中重新定義 include/exclude 選項,它將在執行測試時擴展您的 optimizeDeps。如果 Vitest 在 exclude 中列出相同的選項,它會自動從 include 中刪除它們。
TIP
您將無法編輯 node_modules 中的程式碼進行偵錯,因為該程式碼實際上位於您的 cacheDir 或 test.cache.dir 目錄中。如果您想使用 console.log 語句進行偵錯,請直接編輯它或使用 deps.optimizer?.[mode].force 選項強制重新打包。
deps.optimizer.{mode}.enabled
- 類型:
boolean - 預設值: 如果使用 >= Vite 4.3.2,則為
true,否則為false
啟用依賴項優化。
WARNING
此選項僅適用於 Vite 4.3.2 及更高版本。
deps.web
- 類型:
{ transformAssets?, ... } - 版本: 自 Vite 0.34.2 起
當轉換模式設定為 web 時,應用於外部檔案的選項。預設情況下,jsdom 和 happy-dom 使用 web 模式,而 node 和 edge 環境使用 ssr 轉換模式,因此這些選項對這些環境中的檔案沒有影響。
通常,node_modules 內的檔案會被外部化,但這些選項也會影響 server.deps.external 中的檔案。
deps.web.transformAssets
- 類型:
boolean - 預設值:
true
Vitest 是否應處理資源檔案(.png、.svg、.jpg 等),並像 Vite 在瀏覽器中那樣解析它們。
如果未指定查詢,則此模組將具有等於資源路徑的預設匯出。
WARNING
目前,此選項僅適用於 experimentalVmThreads 池。
deps.web.transformCss
- 類型:
boolean - 預設值:
true
Vitest 是否應處理 CSS 檔案(.css、.scss、.sass 等),並像 Vite 在瀏覽器中那樣解析它們。
如果使用 css 選項禁用 CSS 檔案,則此選項只會抑制 ERR_UNKNOWN_FILE_EXTENSION 錯誤。
WARNING
目前,此選項僅適用於 experimentalVmThreads 池。
deps.web.transformGlobPattern
- 類型:
RegExp | RegExp[] - 預設值:
[]
用於比對應轉換的外部檔案的 Regexp 樣式。
預設情況下,node_modules 內的檔案會被外部化且不進行轉換,除非它是 CSS 或資源,並且相應的選項未被禁用。
WARNING
目前,此選項僅適用於 experimentalVmThreads 池。
deps.registerNodeLoader*
- 類型:
boolean - 預設值:
false
使用 實驗性 Node loader,並使用 Vite 解析演算法來解析外部化檔案中的匯入。
如果禁用,您的 alias 和 <plugin>.resolveId 將不會影響外部化套件(預設情況下為 node_modules)中的匯入。
deps.interopDefault
- 類型:
boolean - 預設值:
true
將 CJS 模組的預設值解譯為命名匯出。某些依賴項僅捆綁 CJS 模組,並且不使用 Node.js 在使用 import 語法而不是 require 匯入套件時可以靜態分析的命名匯出。當在 Node 環境中使用命名匯入匯入此類依賴項時,您將看到此錯誤:
import { read } from 'fs-jetpack';
^^^^
SyntaxError: Named export 'read' not found. The requested module 'fs-jetpack' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export.Vitest 不執行靜態分析,並且無法在您的程式碼執行之前失敗,因此如果禁用此功能,您很可能會在執行測試時看到此錯誤:
TypeError: createAsyncThunk is not a function
TypeError: default is not a function預設情況下,Vitest 假設您正在使用捆綁器來繞過此問題,並且不會失敗,但如果您的程式碼未被處理,您可以手動禁用此行為。
deps.moduleDirectories
- 類型:
string[] - 預設值:
['node_modules']
應視為模組目錄的目錄清單。此配置選項會影響 vi.mock 的行為:當未提供 factory 函數且您要模擬的路徑與其中一個 moduleDirectories 值符合時,Vitest 會嘗試透過在專案的 根目錄 中尋找 __mocks__ 資料夾來解析模擬。
當外部化依賴項時,此選項也會影響檔案是否應被視為模組。預設情況下,Vitest 使用原生 Node.js 匯入外部模組,繞過 Vite 轉換步驟。
設定此選項將覆蓋預設值,如果您希望仍然在 node_modules 中搜尋套件,請將其與任何其他選項一起包含:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
deps: {
moduleDirectories: ['node_modules', path.resolve('../../packages')],
},
},
});runner
- 類型:
VitestRunnerConstructor - 預設值:執行測試時為
node,執行效能測試時為benchmark
自訂測試執行程式的路徑。這是一個進階功能,應與自訂程式庫執行器一起使用。您可以在 文件中 閱讀更多相關資訊。
benchmark
- 類型:
{ include?, exclude?, ... }
執行 vitest bench 時使用的選項。
benchmark.include
- 類型:
string[] - 預設值:
['**/*.{bench,benchmark}.?(c|m)[jt]s?(x)']
效能測試檔案的包含 glob 樣式
benchmark.exclude
- 類型:
string[] - 預設值:
['node_modules', 'dist', '.idea', '.git', '.cache']
效能測試檔案的排除 glob 樣式
benchmark.includeSource
- 類型:
string[] - 預設值:
[]
用於原始碼中效能測試檔案的包含 glob 樣式。此選項與 includeSource 類似。
定義後,Vitest 將執行所有匹配的檔案,這些檔案內部包含 import.meta.vitest。
benchmark.reporters
- 類型:
Arrayable<BenchmarkBuiltinReporters | Reporter> - 預設值:
'default'
用於輸出的自訂報告器。可以包含一個或多個內建報告名稱、報告器實例和/或自訂報告器的路徑。
benchmark.outputFile
- 類型:
string | Record<string, string>
當同時指定 --reporter=json 選項時,將效能測試結果寫入文件。 通過提供物件而不是字串,您可以在使用多個報告器時定義單獨的輸出。
要通過 CLI 命令提供物件,請使用以下語法:--outputFile.json=./path --outputFile.junit=./other-path。
alias
- 類型:
Record<string, string> | Array<{ find: string | RegExp, replacement: string, customResolver?: ResolverFunction | ResolverObject }>
在測試中執行時定義自訂別名。它們將與 resolve.alias 中的別名合併。
globals
- 類型:
boolean - 預設值:
false - CLI:
--globals,--globals=false
預設情況下,vitest 不提供全域 API 以增加明確性。如果您希望像 Jest 一樣全域使用 API,您可以將 --globals 選項傳遞給 CLI 或在配置中添加 globals: true。
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
globals: true,
},
});要使 TypeScript 與全域 API 一起使用,請將 vitest/globals 添加到 tsconfig.json 中的 types 字段
// tsconfig.json
{
"compilerOptions": {
"types": ["vitest/globals"]
}
}如果您已經在您的專案中使用 unplugin-auto-import,您也可以直接使用它來自動匯入這些 API。
// vite.config.ts
import { defineConfig } from 'vitest/config';
import AutoImport from 'unplugin-auto-import/vite';
export default defineConfig({
plugins: [
AutoImport({
imports: ['vitest'],
dts: true, // generate TypeScript declaration
}),
],
});environment
- 類型:
'node' | 'jsdom' | 'happy-dom' | 'edge-runtime' | string - 預設值:
'node' - CLI:
--environment=<env>
指定測試環境。Vitest 預設使用 Node.js 環境。若您正在開發 Web 應用程式,可以使用類似瀏覽器的環境,例如 jsdom 或 happy-dom。若您正在開發邊緣函數,可以使用 edge-runtime 環境。
您可以在檔案頂部添加 @vitest-environment docblock 或註解,為該檔案中的所有測試指定不同的環境:
Docblock 樣式:
/**
* @vitest-environment jsdom
*/
test('use jsdom in this test file', () => {
const element = document.createElement('div');
expect(element).not.toBeNull();
});註解樣式:
// @vitest-environment happy-dom
test('use happy-dom in this test file', () => {
const element = document.createElement('div');
expect(element).not.toBeNull();
});為了與 Jest 兼容,也支援 @jest-environment:
/**
* @jest-environment jsdom
*/
test('use jsdom in this test file', () => {
const element = document.createElement('div');
expect(element).not.toBeNull();
});如果您使用 --threads=false 標誌運行 Vitest,測試將按照以下環境順序執行:node、jsdom、happy-dom、edge-runtime、custom environments(自定義環境)。這表示相同環境的測試會被分組在一起,但執行時仍然是依序執行。
從 0.23.0 開始,您可以定義自定義環境。當使用非內建環境時,Vitest 會嘗試加載 vitest-environment-${name} 套件。該套件應導出一個符合 Environment 類型的物件:
import type { Environment } from 'vitest';
export default <Environment>{
name: 'custom',
transformMode: 'ssr',
setup() {
// custom setup
return {
teardown() {
// called after all tests with this env have been run
},
};
},
};Vitest 也透過 vitest/environments 條目公開 builtinEnvironments,以防您只想擴展它。您可以在 我們的指南 中閱讀有關擴展環境的更多資訊。
environmentOptions
- 類型:
Record<'jsdom' | string, unknown> - 預設值:
{}
這些選項會傳遞到當前 environment 的 setup 方法。預設情況下,如果您使用 JSDOM 作為測試環境,則只能配置 JSDOM 選項。
environmentMatchGlobs
- 類型:
[string, EnvironmentName][] - 預設值:
[]
根據 glob 規則自動分配環境。符合的第一個規則將會被採用。
例如:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
environmentMatchGlobs: [
// all tests in tests/dom will run in jsdom
['tests/dom/**', 'jsdom'],
// all tests in tests/ with .edge.test.ts will run in edge-runtime
['**/*.edge.test.ts', 'edge-runtime'],
// ...
],
},
});poolMatchGlobs
- 類型:
[string, 'threads' | 'child_process' | 'experimentalVmThreads'][] - 預設值:
[] - 版本: 自 Vitest 0.29.4 起
根據 glob 規則自動分配測試運行的執行緒池。符合的第一個規則將會被採用。
例如:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
poolMatchGlobs: [
// all tests in "worker-specific" directory will run inside a worker as if you enabled `--threads` for them,
['**/tests/worker-specific/**', 'threads'],
// run all tests in "browser" directory in an actual browser
['**/tests/browser/**', 'browser'],
// all other tests will run based on "browser.enabled" and "threads" options, if you didn't specify other globs
// ...
],
},
});update*
- 類型:
boolean - 預設值:
false - CLI:
-u,--update,--update=false
更新快照檔案。這將更新所有已更改的快照,並刪除過時的快照。
watch*
- 類型:
boolean - 預設值:
true - CLI:
-w,--watch,--watch=false
啟用監視模式。
root
- 類型:
string - CLI:
-r <path>,--root=<path>
專案的根目錄。
reporters*
- 類型:
Reporter | Reporter[] - 預設值:
'default' - CLI:
--reporter=<name>,--reporter=<name1> --reporter=<name2>
自定義報告器,用於輸出測試結果。報告器可以是 Reporter 實例 或字串,用於選擇內建報告器:
'default'- 在測試套件通過時摺疊它們。'basic'- 提供類似於 CI 環境中預設報告器的報告器。'verbose'- 保持完整的任務樹可見。'dot'- 將每個任務顯示為單個點。'junit'- JUnit XML 報告器(您可以使用VITEST_JUNIT_SUITE_NAME環境變數配置testsuites標籤名稱,並使用VITEST_JUNIT_CLASSNAME配置classname標籤屬性)。'json'- 提供一個簡單的 JSON 摘要。'html'- 根據@vitest/ui輸出 HTML 報告。'hanging-process'- 顯示卡住的程序列表,如果 Vitest 無法安全地結束程序。這可能會消耗較多資源,僅在 Vitest 無法穩定結束程序時才啟用。- 自定義報告器的路徑(例如
'./path/to/reporter.ts','@scope/reporter')。
outputFile*
- 類型:
string | Record<string, string> - CLI:
--outputFile=<path>,--outputFile.json=./path
當同時指定 --reporter=json、--reporter=html 或 --reporter=junit 選項時,將測試結果寫入檔案。 透過提供物件而不是字串,您可以在使用多個報告器時定義單獨的輸出。
experimentalVmThreads
- 類型:
boolean - CLI:
--experimentalVmThreads,--experimental-vm-threads - 版本: 自 Vitest 0.34.0 起
使用 VM context(在沙盒環境中)在 worker 池中運行測試。
這使得測試運行得更快,但 VM 模組在運行 ESM 代碼 時不穩定。您的測試將 洩漏記憶體 - 為了解決這個問題,請考慮手動編輯 experimentalVmWorkerMemoryLimit 值。
WARNING
在沙盒中運行程式碼有一些優點(更快的測試),但也帶來了一些缺點。
- 原生模組中的全域變數,例如 (
fs,path等),與測試環境中存在的全域變數不同。因此,這些原生模組拋出的任何錯誤都將引用與程式碼中使用的錯誤構造函數不同的錯誤構造函數:
try {
fs.writeFileSync('/doesnt exist');
} catch (err) {
console.log(err instanceof Error); // false
}- 導入 ES 模組會無限期地緩存它們,如果您有很多上下文(測試檔案),這會導致記憶體洩漏。Node.js 中沒有清除該緩存的 API。
- 在沙盒環境中,訪問全域變數 需要更長的時間。
使用此選項時,請注意這些問題。Vitest 團隊無法在此方面提供協助。
experimentalVmWorkerMemoryLimit
- 類型:
string | number - CLI:
--experimentalVmWorkerMemoryLimit,--experimental-vm-worker-memory-limit - 預設值:
1 / CPU Cores - 版本: 自 Vitest 0.34.0 起
指定在回收 worker 之前 worker 的記憶體限制。此值在很大程度上取決於您的環境,因此最好手動指定它,而不是依賴預設值。
此選項僅影響在 VM context 中運行測試的 worker。
TIP
此功能的實作基於 Jest 的 workerIdleMemoryLimit。
記憶體限制可以使用多種方式指定,最終都會使用 Math.floor 轉換為整數值:
<= 1- 此數值會被視為系統記憶體的百分比。例如,0.5 會將 worker 的記憶體限制設定為系統總記憶體的一半\> 1- 此數值會被視為固定的位元組值。根據先前的規則,如果您需要 1 位元組的值 (雖然我不知道為什麼),可以使用 1.1。帶有單位
50%- 如上所述,佔總系統記憶體的百分比100KB,65MB等 - 帶有單位表示固定記憶體限制。K/KB- 千位元組 (x1000)KiB- 千位元組 (x1024)M/MB- 兆位元組MiB- 兆位元組(MiB)G/GB- 吉位元組GiB- 吉位元組(GiB)
WARNING
由於報告的系統記憶體不正確,基於百分比的記憶體限制 在 Linux CircleCI 上不起作用 worker。
threads
- 類型:
boolean - 預設值:
true - CLI:
--threads,--threads=false
使用 tinypool (一個 Piscina 的輕量化分支) 啟用多執行緒。在 Vitest 0.29.0 之前,即使禁用此選項,Vitest 仍然在 worker 線程中運行測試。從 0.29.0 開始,如果禁用此選項,Vitest 將使用 child_process 產生一個進程來在其中運行測試,這意味著您可以使用 process.chdir 和其他在 worker 內部不可用的 API。如果您想恢復到之前的行為,請改用 --single-thread 選項。
停用此選項會讓所有測試在多個子程序中執行。
singleThread
- 類型:
boolean - 預設值:
false - 版本: 自 Vitest 0.29.0 起
在單一 worker 執行緒中執行所有具有相同環境的測試。這將禁用內建模組隔離(您的原始程式碼或 內聯 程式碼仍將為每個測試重新評估),但可以提高測試效能。在 Vitest 0.29.0 之前,這相當於使用 --no-threads。
WARNING
即使此選項將強制測試一個接一個地運行,但此選項與 Jest 的 --runInBand 不同。Vitest 使用 worker 不僅僅是為了並行運行測試,還為了提供隔離。停用此選項後,您的測試會依序執行,但在相同的全域環境中執行,因此您必須自行處理隔離。
如果您依賴全域狀態 (前端框架通常如此),或您的程式碼需要為每個測試單獨定義環境,這可能會造成問題。但對於不依賴全域狀態或可以輕易繞過的測試來說,這可以大幅提升速度 (最高可達 3 倍)。
maxThreads*
- 類型:
number - 預設值: 可用 CPU 數量
最大線程數量。您也可以使用 VITEST_MAX_THREADS 環境變數。
minThreads*
- 類型:
number - 預設值: 可用 CPU 數量
最小線程數。您也可以使用 VITEST_MIN_THREADS 環境變數。
useAtomics*
- 類型:
boolean - 預設值:
false - 版本: 自 Vitest 0.28.3 起
使用 Atomics 同步線程。
這可以提高效能,但可能會在較舊的 Node 版本中導致段錯誤。
testTimeout
- 類型:
number - 預設值:
5000 - CLI:
--test-timeout=5000
測試的預設超時時間(以毫秒計)。
hookTimeout
- 類型:
number - 預設值:
10000
hook 的預設超時時間(以毫秒為單位)。
teardownTimeout*
- 類型:
number - 預設值:
10000
Vitest 關閉時等待關閉的預設超時時間(以毫秒為單位)。
silent*
- 類型:
boolean - 預設值:
false - CLI:
--silent,--silent=false
靜音測試的控制台輸出。
setupFiles
- 類型:
string | string[]
設定檔的路徑。這些檔案會在每個測試檔案執行前執行。
INFO
更改設定檔案將觸發所有測試的重新運行。
您可以在其中使用 process.env.VITEST_POOL_ID(類似整數的字串)來區分線程(如果使用 threads: false 運行,則始終為 '1')。
TIP
請注意,如果您正在運行 --threads=false,則此設定檔案將在相同的全域範圍內多次運行。這表示您在每次測試前都會存取相同的全域物件,請確認您沒有重複執行不必要的動作。
例如,您可以依賴全域變數:
import { config } from '@some-testing-lib';
if (!globalThis.defined) {
config.plugins = [myCoolPlugin];
computeHeavyThing();
globalThis.defined = true;
}
// hooks are reset before each suite
afterEach(() => {
cleanup();
});
globalThis.resetBeforeEachTest = true;globalSetup
- 類型:
string | string[]
全域設定檔的路徑,應相對於專案根目錄。
全域設定檔可以匯出具名的 setup 和 teardown 函式,或是匯出一個預設函式,該函式會回傳一個 teardown 函式 (範例)。
INFO
可設定多個 globalSetup 檔案。setup 和 teardown 按順序執行,teardown 按相反的順序執行。
WARNING
請注意,全域設定是在不同的全域範圍中執行,因此您的測試無法訪問此處定義的變數。
watchExclude*
- 類型:
string[] - 預設值:
['**/node_modules/**', '**/dist/**']
要從觸發監視重新運行中忽略的檔案路徑的 Glob 模式。
forceRerunTriggers*
- 類型:
string[] - 預設值:
['**/package.json/**', '**/vitest.config.*/**', '**/vite.config.*/**']
觸發整個測試套件重新執行的檔案路徑 Glob 模式。當與 --changed 參數搭配使用時,如果在 git diff 中找到符合的檔案,則會執行整個測試套件。
如果您正在測試調用 CLI 命令,這很有用,因為 Vite 無法構建模組圖:
test('execute a script', async () => {
// Vitest cannot rerun this test, if content of `dist/index.js` changes
await execa('node', ['dist/index.js']);
});TIP
請確保您的檔案未被 watchExclude 排除。
isolate
- 類型:
boolean - 預設值:
true - CLI:
--isolate,--isolate=false
為每個測試檔案隔離執行環境。 若停用 --threads,此選項將無效。
此選項對 experimentalVmThreads 沒有影響。
coverage*
您可以使用 v8、istanbul 或 自定義涵蓋率解決方案 來收集程式碼涵蓋率資訊。
您可以使用點記法向 CLI 提供涵蓋率選項:
npx vitest --coverage.enabled --coverage.provider=istanbul --coverage.allWARNING
如果您使用點記法設定涵蓋率選項,請務必指定 --coverage.enabled。 在這種情況下,請勿提供單個 --coverage 選項。
coverage.provider
- 類型:
'v8' | 'istanbul' | 'custom' - 預設值:
'v8' - CLI:
--coverage.provider=<provider>
使用 provider 選擇用於程式碼涵蓋率收集的工具。
coverage.enabled
- 類型:
boolean - 預設值:
false - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.enabled,--coverage.enabled=false
啟用程式碼涵蓋率收集。 可以使用 --coverage CLI 選項覆寫。
coverage.include
- 類型:
string[] - 預設值:
['**'] - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.include=<path>,--coverage.include=<path1> --coverage.include=<path2>
以 glob 模式表示,包含在程式碼涵蓋率計算中的檔案清單。
coverage.extension
- 類型:
string | string[] - 預設值:
['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.vue', '.svelte'] - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.extension=<extension>,--coverage.extension=<extension1> --coverage.extension=<extension2>
coverage.exclude
- 類型:
string[] - 預設值:
[
'coverage/**',
'dist/**',
'packages/*/test?(s)/**',
'**/*.d.ts',
'**/virtual:*',
'**/__x00__*',
'**/\x00*',
'cypress/**',
'test?(s)/**',
'test?(-*).?(c|m)[jt]s?(x)',
'**/*{.,-}{test,spec}.?(c|m)[jt]s?(x)',
'**/__tests__/**',
'**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*',
'**/vitest.{workspace,projects}.[jt]s?(on)',
'**/.{eslint,mocha,prettier}rc.{?(c|m)js,yml}',
];- 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.exclude=<path>,--coverage.exclude=<path1> --coverage.exclude=<path2>
以 glob 模式表示,從程式碼涵蓋率計算中排除的檔案清單。
coverage.all
- 類型:
boolean - 預設值:
false - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.all,--coverage.all=false
是否將所有檔案(包含未經過測試的檔案)納入涵蓋率報告中。
coverage.clean
- 類型:
boolean - 預設值:
true - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.clean,--coverage.clean=false
在執行測試之前清除先前的涵蓋率結果。
coverage.cleanOnRerun
- 類型:
boolean - 預設值:
true - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.cleanOnRerun,--coverage.cleanOnRerun=false
在監看模式下重新執行測試時,清除涵蓋率報告。
coverage.reportsDirectory
- 類型:
string - 預設值:
'./coverage' - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.reportsDirectory=<path>
將涵蓋率報告寫入的目錄。
coverage.reporter
- 類型:
string | string[] | [string, {}][] - 預設值:
['text', 'html', 'clover', 'json'] - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.reporter=<reporter>,--coverage.reporter=<reporter1> --coverage.reporter=<reporter2>
要使用的涵蓋率報告器。 所有報告器的詳細清單請參考 istanbul 文件。 有關報告器特定選項的詳細資訊,請參閱 @types/istanbul-reporter。
報告器有三種不同的類型:
- 單個報告器:
{ reporter: 'html' } - 沒有選項的多個報告器:
{ reporter: ['html', 'json'] } - 具有報告器選項的單個或多個報告器: ts
{ reporter: [ ['lcov', { projectRoot: './src' }], ['json', { file: 'coverage.json' }], ['text'], ]; }
從 Vitest 0.31.0 開始,您可以在 Vitest UI 中檢查您的涵蓋率報告:查看 Vitest UI 涵蓋率 以獲取更多詳細資訊。
coverage.reportOnFailure
- 類型:
boolean - 預設值:
false(自 Vitest0.34.0起) - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.reportOnFailure,--coverage.reportOnFailure=false - 版本: 自 Vitest 0.31.2 起
即使測試失敗,也產生涵蓋率報告。
coverage.allowExternal
- 類型:
boolean - 預設值:
false - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.allowExternal,--coverage.allowExternal=false
收集 專案 root 以外的檔案的涵蓋率資訊。
coverage.skipFull
- 類型:
boolean - 預設值:
false - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.skipFull,--coverage.skipFull=false
不顯示語句、分支和函式涵蓋率皆為 100% 的檔案。
coverage.perFile
- 類型:
boolean - 預設值:
false - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.perFile,--coverage.perFile=false
針對每個檔案檢查是否達到涵蓋率門檻值。 關於實際門檻值,請參閱 lines、functions、branches 和 statements。
coverage.thresholdAutoUpdate
- 類型:
boolean - 預設值:
false - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.thresholdAutoUpdate=<boolean>
當目前的涵蓋率高於設定的門檻值時,自動更新設定檔中的 lines、functions、branches 和 statements 門檻值。 此選項有助於在涵蓋率提高時保持門檻值。
coverage.lines
- 類型:
number - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.lines=<number>
程式碼行的涵蓋率門檻值。 詳見 istanbul 文件。
coverage.functions
- 類型:
number - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.functions=<number>
函式的涵蓋率門檻值。 詳見 istanbul 文件。
coverage.branches
- 類型:
number - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.branches=<number>
分支的涵蓋率門檻值。 詳見 istanbul 文件。
coverage.statements
- 類型:
number - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.statements=<number>
語句的涵蓋率門檻值。 詳見 istanbul 文件。
coverage.100
- 類型:
boolean - 預設值:
false - 適用於提供者:
'v8' | 'istanbul' - CLI:
--coverage.100,--coverage.100=false
--coverage.lines 100 --coverage.functions 100 --coverage.branches 100 --coverage.statements 100 的快捷方式。
coverage.ignoreClassMethods
- 類型:
string[] - 預設值:
[] - 適用於提供者:
'istanbul' - CLI:
--coverage.ignoreClassMethods=<method>
設定為要從涵蓋率計算中排除的類別方法名稱陣列。 詳見 istanbul 文件。
coverage.watermarks
- 類型:
{
statements?: [number, number],
functions?: [number, number],
branches?: [number, number],
lines?: [number, number]
}- 預設值:
{
statements: [50, 80],
functions: [50, 80],
branches: [50, 80],
lines: [50, 80]
}- 適用於提供者:
'v8' | 'istanbul'
語句、行、分支和函式涵蓋率的水位線。 詳見 istanbul 文件。
coverage.customProviderModule
- 類型:
string - 適用於提供者:
'custom' - CLI:
--coverage.customProviderModule=<path or module name>
指定自定義涵蓋率提供者模組的模組名稱或路徑。 有關更多資訊,請參閱 指南 - 自定義涵蓋率提供者。
testNamePattern*
- 類型:
string | RegExp - CLI:
-t <pattern>,--testNamePattern=<pattern>,--test-name-pattern=<pattern>
執行完整名稱符合指定模式的測試。 如果在此屬性中加入 OnlyRunThis,則會跳過測試名稱中不包含 OnlyRunThis 的測試。
import { expect, test } from 'vitest';
// 執行
test('OnlyRunThis', () => {
expect(true).toBe(true);
});
// 跳過
test('doNotRun', () => {
expect(true).toBe(true);
});open*
- 類型:
boolean - 預設值:
false - CLI:
--open,--open=false
打開 Vitest UI (WIP)。
api
- 類型:
boolean | number - 預設值:
false - CLI:
--api,--api.port,--api.host,--api.strictPort
監聽連接埠並提供 API 服務。 設定為 true 時,預設連接埠為 51204。
browser
- 類型:
{ enabled?, name?, provider?, headless?, api?, slowHijackESM? } - 預設值:
{ enabled: false, headless: process.env.CI, api: 63315 } - 版本: 自 Vitest 0.29.4 起
- CLI:
--browser,--browser=<name>,--browser.name=chrome --browser.headless
在瀏覽器中執行 Vitest 測試。 預設情況下,我們使用 WebdriverIO 執行測試,但可以使用 browser.provider 選項進行設定。
NOTE
請在 指南頁面 中閱讀有關在真實瀏覽器中進行測試的更多資訊。
WARNING
這是一個實驗性功能。 重大變更可能不遵循語意化版本規範 (semver),請在使用時鎖定 Vitest 的版本。
browser.enabled
- 類型:
boolean - 預設值:
false - CLI:
--browser,--browser.enabled=false
預設會在瀏覽器中執行所有測試。 可以使用 poolMatchGlobs 選項覆寫。
browser.name
- 類型:
string - CLI:
--browser=safari
在特定瀏覽器中執行所有測試。 不同提供者中的可能選項:
webdriverio:firefox、chrome、edge、safariplaywright:firefox、webkit、chromium- custom:任何傳遞給提供者的字串
browser.headless
- 類型:
boolean - 預設值:
process.env.CI - CLI:
--browser.headless,--brower.headless=false
在 headless 模式下執行瀏覽器。 如果在 CI 環境中執行 Vitest,預設會啟用此選項。
browser.api
- 類型:
number | { port?, strictPort?, host? } - 預設值:
63315 - CLI:
--browser.api=63315,--browser.api.port=1234, --browser.api.host=example.com
設定 Vite 伺服器的選項,該伺服器用於在瀏覽器中提供程式碼。 不影響 test.api 選項。
browser.provider
- 類型:
'webdriverio' | 'playwright' | string - 預設值:
'webdriverio' - CLI:
--browser.provider=playwright
執行瀏覽器測試時所使用的 Provider 的路徑。 Vitest 提供了兩個 Provider,即 webdriverio(預設)和 playwright。 自訂 Provider 應使用 default 導出,並具有以下介面定義:
export interface BrowserProvider {
name: string;
getSupportedBrowsers(): readonly string[];
initialize(ctx: Vitest, options: { browser: string }): Awaitable<void>;
openPage(url: string): Awaitable<void>;
close(): Awaitable<void>;
}WARNING
這是一個適用於函式庫作者的高階 API。 如果您只需要在瀏覽器中執行測試,請使用 browser 選項。
browser.slowHijackESM
- 類型:
boolean - 預設值:
true - 版本: 自 Vitest 0.31.0 起
在 Node.js 中執行測試時,Vitest 可以使用自己的模組解析器,以便使用 vi.mock 語法輕鬆模擬模組。 然而,在瀏覽器中複製 ES 模組解析並不容易,因此我們需要在瀏覽器能夠使用之前轉換您的原始碼檔案。
此選項對在 Node.js 內部執行的測試無效。
預設情況下,在瀏覽器中執行時會啟用此選項。 如果您不依賴使用 vi.spyOn 監視 ES 模組,並且不使用 vi.mock,則可以停用此選項以稍微提高效能。
clearMocks
- 類型:
boolean - 預設值:
false
將在每次測試之前對所有監視器呼叫 .mockClear()。 這將清除模擬紀錄,但不會將其實現重置為預設狀態。
mockReset
- 類型:
boolean - 預設值:
false
將在每次測試之前對所有監視器呼叫 .mockReset()。 這將清除模擬紀錄,並將其實現重置為空的函數(將返回 undefined)。
restoreMocks
- 類型:
boolean - 預設值:
false
將在每次測試之前對所有監視器呼叫 .mockRestore()。 這將清除模擬紀錄,並將其實現重置為原始實現。
unstubEnvs
- 類型:
boolean - 預設值:
false - 版本: 自 Vitest 0.26.0 起
將在每次測試之前呼叫 vi.unstubAllEnvs。
unstubGlobals
- 類型:
boolean - 預設值:
false - 版本: 自 Vitest 0.26.0 起
將在每次測試之前呼叫 vi.unstubAllGlobals。
testTransformMode
- 類型:
{ web?, ssr? } - 版本: 自 Vitest 0.34.0 起
確定與 glob 模式匹配的測試中匯入的所有模組的轉換方法。 預設情況下,依賴於環境。 例如,具有 JSDOM 環境的測試將使用 ssr: false 標誌處理所有檔案,而具有 Node 環境的測試將使用 ssr: true 處理所有模組。
testTransformMode.ssr
- 類型:
string[] - 預設值:
[]
對指定測試中的所有模組使用 SSR 轉換管道。
Vite 外掛程式在處理這些檔案時將收到 ssr: true 標誌。
testTransformMode.web
- 類型:
string[] - 預設值:
[]
首先執行正常的轉換管道(以瀏覽器為目標),然後執行 SSR 覆蓋以在 Node 中執行程式碼。
Vite 外掛程式在處理這些檔案時將收到 ssr: false 標誌。
snapshotFormat*
- 類型:
PrettyFormatOptions
快照測試的格式選項。 這些選項會傳遞到 pretty-format。
resolveSnapshotPath*
- 類型:
(testPath: string, snapExtension: string) => string - 預設值:將快照檔案儲存在
__snapshots__目錄中
覆寫預設快照路徑。 例如,若要將快照儲存在測試檔案旁邊:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
resolveSnapshotPath: (testPath, snapExtension) => testPath + snapExtension,
},
});allowOnly
- 類型:
boolean - 預設值:
false - CLI:
--allowOnly,--allowOnly=false
允許標記為 only 的測試和測試套件。
dangerouslyIgnoreUnhandledErrors*
- 類型:
boolean - 預設值:
false - CLI:
--dangerouslyIgnoreUnhandledErrors--dangerouslyIgnoreUnhandledErrors=false
忽略發生的任何未處理的錯誤。
passWithNoTests*
- 類型:
boolean - 預設值:
false - CLI:
--passWithNoTests,--passWithNoTests=false
如果找不到任何測試,Vitest 將不會失敗。
logHeapUsage
- 類型:
boolean - 預設值:
false - CLI:
--logHeapUsage,--logHeapUsage=false
在每次測試後顯示堆積使用量。 對於偵錯記憶體泄漏很有用。
css
- 類型:
boolean | { include?, exclude?, modules? }
設定是否應處理 CSS。 排除時,CSS 檔案將被替換為空字串,以避免後續處理。 CSS 模組將傳回一個 Proxy,以不影響運行時。
css.include
- 類型:
RegExp | RegExp[] - 預設值:
[]
應該傳回實際 CSS 並由 Vite 管道處理的檔案的 RegExp 模式。
TIP
若要處理所有 CSS 檔案,請使用 /.+/。
css.exclude
- 類型:
RegExp | RegExp[] - 預設值:
[]
將傳回空 CSS 檔案的檔案的 RegExp 模式。
css.modules
- 類型:
{ classNameStrategy? } - 預設值:
{}
css.modules.classNameStrategy
- 類型:
'stable' | 'scoped' | 'non-scoped' - 預設值:
'stable'
如果您決定處理 CSS 檔案,您可以設定 CSS 模組內的類別名稱是否應被限定作用域。 您可以選擇以下選項之一:
stable:類別名稱將產生為_${name}_${hashedFilename},這表示如果 CSS 內容已變更,則產生的類別將保持不變,但如果檔案名稱已修改或檔案已移動到另一個資料夾,則會變更。 如果您使用快照功能,此設定很有用。scoped:類別名稱將照常產生,如果您的 CSS 處理已啟用,則會遵循css.modules.generateScopeName方法。 預設情況下,檔案名稱將產生為_${name}_${hash},其中哈希值包括檔案名稱和檔案內容。non-scoped:類別名稱將不會被哈希值。
WARNING
預設情況下,Vitest 會匯出一個 Proxy,跳過 CSS 模組處理。 如果您依賴於 CSS 模組中的類別屬性,則必須使用 include 選項啟用 CSS 處理。
maxConcurrency
- 類型:
number - 預設值:
5
允許同時執行的標記為 test.concurrent 的測試數量。
超出此限制的測試將排隊,以便在出現可用時段時執行。
cache*
- 類型:
false | { dir? }
用於設定 Vitest 快取原則的選項。 目前,Vitest 會儲存測試結果的快取,以便首先執行較長且失敗的測試。
cache.dir
- 類型:
string - 預設值:
node_modules/.vitest
快取目錄的路徑。
sequence
- 類型:
{ sequencer?, shuffle?, seed?, hooks?, setupFiles? }
用於測試應如何排序的選項。
您可以使用點表示法將序列選項提供給 CLI:
npx vitest --sequence.shuffle --sequence.seed=1000sequence.sequencer*
- 類型:
TestSequencerConstructor - 預設值:
BaseSequencer
一個自訂類別,用於定義分片和排序的方法。 如果您只需要重新定義 sort 和 shard 方法之一,則可以從 vitest/node 擴充 BaseSequencer,但這兩種方法都應該存在。
分片發生在排序之前,並且僅在提供 --shard 選項時發生。
sequence.shuffle
- 類型:
boolean - 預設值:
false - CLI:
--sequence.shuffle,--sequence.shuffle=false
如果您希望測試隨機執行,您可以使用此選項或 CLI 引數 --sequence.shuffle 啟用它。
Vitest 通常使用快取來排序測試,因此長時間執行的測試會更早開始 - 這使得測試執行速度更快。 如果您的測試將以隨機順序執行,您將失去此效能改進,但它可能對於追蹤意外依賴先前執行的另一個測試的測試很有幫助。
sequence.concurrent
- 類型:
boolean - 預設值:
false - CLI:
--sequence.concurrent,--sequence.concurrent=false - 版本: 自 Vitest 0.32.2 起
如果您希望測試並行執行,您可以使用此選項或 CLI 引數 --sequence.concurrent 啟用它。
sequence.seed*
- 類型:
number - 預設值:
Date.now() - CLI:
--sequence.seed=1000
如果測試以隨機順序執行,則設定隨機化種子。
sequence.hooks
- 類型:
'stack' | 'list' | 'parallel' - 預設值:
'parallel' - CLI:
--sequence.hooks=<value>
變更 Hook 的執行順序。
stack將以相反的順序排序 "after" Hook,"before" Hook 將以被定義的順序執行list將以定義的順序排序所有 Hookparallel將並行執行單個群組中的 Hook(父套件中的 Hook 仍將在目前套件的 Hook 之前執行)
sequence.setupFiles
- 類型:
'list' | 'parallel' - 預設值:
'parallel' - CLI:
--sequence.setupFiles=<value> - 版本: 自 Vitest 0.29.3 起
變更設定檔案的執行順序。
list將以定義的順序執行設定檔案parallel將並行執行設定檔案
typecheck
用於設定 類型檢查 測試環境的選項。
typecheck.checker
- 類型:
'tsc' | 'vue-tsc' | string - 預設值:
tsc
要使用什麼工具進行類型檢查。 Vitest 將產生一個具有某些參數的程序,以便更輕鬆地進行解析,具體取決於類型。 檢查器應實現與 tsc 相同的輸出格式。
您需要安裝一個套件才能使用類型檢查器:
tsc需要typescript套件vue-tsc需要vue-tsc套件
您也可以傳遞自訂二進制文件或命令名稱的路徑,該路徑產生與 tsc --noEmit --pretty false 相同的輸出。
typecheck.include
- 類型:
string[] - 預設值:
['**/*.{test,spec}-d.?(c|m)[jt]s?(x)']
應該被視為測試檔案的檔案的 Glob 模式
typecheck.exclude
- 類型:
string[] - 預設值:
['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**']
不應被視為測試檔案的檔案的 Glob 模式
typecheck.allowJs
- 類型:
boolean - 預設值:
false
檢查具有 @ts-check 註解的 JS 檔案。 如果您在 tsconfig 中啟用了它,這將不會覆寫它。
typecheck.ignoreSourceErrors
- 類型:
boolean - 預設值:
false
如果 Vitest 在測試檔案之外找到錯誤,則不應該失敗。 這將不會顯示任何非測試錯誤。
預設情況下,如果 Vitest 找到來源錯誤,測試套件將會失敗。
typecheck.tsconfig
- 類型:
string - 預設值: 嘗試尋找最接近的 tsconfig.json
自訂 tsconfig 的路徑,相對於專案根目錄。
slowTestThreshold*
- 類型:
number - 預設值:
300
測試被認為速度慢並在結果中報告為此類的時間(以毫秒為單位)。
chaiConfig
- 類型:
{ includeStack?, showDiff?, truncateThreshold? } - 預設值:
{ includeStack: false, showDiff: true, truncateThreshold: 40 } - 版本: 自 Vitest 0.30.0 起
等效於 Chai config。
chaiConfig.includeStack
- 類型:
boolean - 預設值:
false
影響堆疊追蹤是否包含在 Assertion 錯誤訊息中。 預設值 false 會抑制錯誤訊息中的堆疊追蹤。
chaiConfig.showDiff
- 類型:
boolean - 預設值:
true
影響是否應在擲出的 AssertionErrors 中包含 showDiff 標誌。 false 將始終為 false;當斷言已請求顯示差異時,true 將為 true。
chaiConfig.truncateThreshold
- 類型:
number - 預設值:
40
設定斷言錯誤中實際值和預期值的長度閾值。 如果超過此閾值,例如對於大型資料結構,則該值將被替換為類似 [ Array(3) ] 或 { Object (prop1, prop2) } 的內容。 如果您想完全停用截斷,請將其設定為 0。
此配置選項會影響 test.each 標題和斷言錯誤訊息內部的截斷值。
bail
- 類型:
number - 預設值:
0 - CLI:
--bail=<value> - 版本: 自 Vitest 0.31.0 起
當給定數量的測試失敗時停止測試執行。
預設情況下,即使某些測試失敗,Vitest 也會執行所有測試案例。 這對於僅對 100% 成功的建置感興趣,並且希望在發生測試失敗時儘早停止測試執行的 CI 建置可能不理想。 bail 選項可用於透過防止 CI 在發生失敗時執行更多測試來加速 CI 執行。
retry
- 類型:
number - 預設值:
0 - CLI:
--retry=<value> - 版本: 自 Vitest 0.32.3 起
如果測試失敗,則重試特定次數。
onConsoleLog
- 類型:
(log: string, type: 'stdout' | 'stderr') => false | void
用於測試中 console.log 的自訂處理常式。 如果您傳回 false,Vitest 將不會將日誌列印到控制台。
對於過濾掉來自第三方程式庫的日誌很有用。
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
onConsoleLog(log: string, type: 'stdout' | 'stderr'): boolean | void {
if (log === 'message from third party library' && type === 'stdout')
return false;
},
},
});diff
- 類型:
string - CLI:
--diff=<value> - 版本: 自 Vitest 0.34.5 起
用於產生差異介面的差異配置檔案的路徑。 如果您想自訂差異顯示,這很有用。
import type { DiffOptions } from 'vitest';
import c from 'picocolors';
export default {
aIndicator: c.bold('--'),
bIndicator: c.bold('++'),
omitAnnotationLines: true,
} satisfies DiffOptions;import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
diff: './vitest.diff.ts',
},
});