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

與其他測試執行器的比較

本頁導覽

配置 Vitest ​

如果您正在使用 Vite 且專案中存在 vite.config 檔案,Vitest 將會自動讀取該檔案,以匹配您 Vite 應用程式中的外掛程式與設定。如果您希望為測試設定不同的配置,或者您的主要應用程式不特別依賴於 Vite,您可以採取以下措施:

  • 建立 vitest.config.ts 檔案。此檔案的配置將具有更高的優先級,並會覆寫 vite.config.ts 中的所有配置(Vitest 支援所有常見的 JS 和 TS 擴展名,但不支援 json)。這表示您 vite.config 中的所有選項將被忽略。
  • 透過 CLI 傳遞 --config 選項,例如執行 vitest --config ./path/to/vitest.config.ts。
  • 在 vite.config.ts 中,使用 process.env.VITEST 或 defineConfig 上的 mode 屬性(若未被 --mode 覆寫,此屬性將設定為 test/benchmark),以有條件地應用不同的配置。

若要配置 vitest 本身,請在 Vite 配置中添加 test 屬性。如果您是從 vite 本身導入 defineConfig,您還需要在配置檔案的頂部使用 三斜線指令 添加對 Vitest 類型的引用。

開啟配置範例

使用來自 vite 的 defineConfig,您應遵循以下方式:

ts
/// <reference types="vitest" />
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    // ... 在此指定選項。
  },
});

<reference types="vitest" /> 將在 Vitest 4 中停止運作,但您現在就可以開始遷移到 vitest/config:

ts
/// <reference types="vitest/config" />
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    // ... 在此指定選項。
  },
});

使用來自 vitest/config 的 defineConfig,您應遵循以下方式:

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

export default defineConfig({
  test: {
    // ... 在此指定選項。
  },
});

您可以檢索 Vitest 的預設選項,以便在需要時擴展它們:

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

export default defineConfig({
  test: {
    exclude: [...configDefaults.exclude, 'packages/template/*'],
  },
});

當使用單獨的 vitest.config.js 時,如果需要,您還可以從另一個配置檔案擴展 Vite 的選項:

ts
import { defineConfig, mergeConfig } from 'vitest/config';
import viteConfig from './vite.config';

export default mergeConfig(
  viteConfig,
  defineConfig({
    test: {
      exclude: ['packages/template/*'],
    },
  })
);

如果您的 Vite 配置定義為一個函數,您可以像這樣定義配置:

ts
import { defineConfig, mergeConfig } from 'vitest/config';
import viteConfig from './vite.config';

export default defineConfig(configEnv =>
  mergeConfig(
    viteConfig(configEnv),
    defineConfig({
      test: {
        exclude: ['packages/template/*'],
      },
    })
  )
);

WARNING

本頁面上的_所有列出選項_都位於配置內的 test 屬性中:

ts
export default defineConfig({
  test: {
    exclude: [],
  },
});

由於 Vitest 使用 Vite 配置,您也可以使用 Vite 中的任何配置選項。例如,define 用於定義全域變數,或 resolve.alias 用於定義別名——這些選項應該定義在頂層,_而不是_在 test 屬性內。

不支援在 專案 配置中使用的配置選項旁邊有 * 標誌。這表示它們只能在根 Vitest 配置中設定。

include ​

  • 類型: string[]
  • 預設: ['**/*.{test,spec}.?(c|m)[jt]s?(x)']
  • CLI: vitest [...include], vitest **/*.test.js

匹配您的測試檔案的 glob 模式列表。

注意

當使用覆蓋率時,Vitest 會自動將測試檔案的 include 模式添加到覆蓋率的預設 exclude 模式中。請參閱 coverage.exclude。

exclude ​

  • 類型: string[]
  • 預設: ['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**', '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.*']
  • CLI: vitest --exclude "**/excluded-file"

應從您的測試檔案中排除的 glob 模式列表。

WARNING

此選項不影響覆蓋率。如果您需要從覆蓋率報告中移除某些檔案,請使用 coverage.exclude。

這是唯一一個如果您透過 CLI 旗標提供它,它不會覆寫您的配置的選項。透過 --exclude 旗標添加的所有 glob 模式都將添加到配置的 exclude 中。

includeSource ​

  • 類型: string[]
  • 預設: []

包含源內測試檔案的 glob 模式。

定義後,Vitest 將執行所有匹配的檔案,其中包含 import.meta.vitest。

name ​

  • 類型: string | { label: string, color?: LabelColor }

為測試專案或 Vitest 處理程序指定自訂名稱。該名稱將在 CLI 和 UI 中可見,並可透過 project.name 在 Node.js API 中使用。

CLI 和 UI 使用的顏色可以透過提供一個帶有 color 屬性的物件來更改。

server ​

  • 類型: { sourcemap?, deps?, ... }

Vite-Node 伺服器選項。

server.sourcemap ​

  • 類型: 'inline' | boolean
  • 預設: 'inline'

將內聯源映射注入模組。

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。外部化的依賴項將不適用於 Vite 的轉換器和解析器,因此它們不支援重新載入時的 HMR。預設情況下,node_modules 中的所有套件都已外部化。

這些選項支援 node_modules 中寫入的套件名稱或 deps.moduleDirectories 中指定的套件名稱。例如,位於 packages/some-name 中的套件 @company/some-name 應指定為 some-name,並且 packages 應包含在 deps.moduleDirectories 中。基本上,Vitest 總是檢查檔案路徑,而不是實際的套件名稱。

如果使用正規表達式,Vitest 會在_檔案路徑_上呼叫它,而不是套件名稱。

server.deps.inline ​

  • 類型: (string | RegExp)[] | true
  • 預設: []

Vite 將處理內聯模組。這有助於處理以 ESM 格式(Node 無法處理)發布 .js 的套件。

如果為 true,則每個依賴項都將內聯。ssr.noExternal 中指定的所有依賴項將預設內聯。

server.deps.fallbackCJS ​

  • 類型 boolean
  • 預設: false

當依賴項是有效的 ESM 套件時,嘗試根據路徑猜測 cjs 版本。如果依賴項的 ESM 檔案錯誤,這可能會有所幫助。

如果套件在 ESM 和 CJS 模式下具有不同的邏輯,這可能會導致一些不一致。

server.deps.cacheDir ​

  • 類型 string
  • 預設:'node_modules/.vite'

儲存快取檔案的目錄。

deps ​

  • 類型: { optimizer?, ... }

處理依賴項解析。

deps.optimizer ​

  • 類型: { ssr?, web? }
  • 另請參閱: 依賴項優化選項

啟用依賴項優化。如果您有很多測試,這可能會提高它們的效能。

當 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。如果 include 中列出的選項在 exclude 中,Vitest 會自動將其從 include 中移除。

TIP

您將無法編輯 node_modules 程式碼進行偵錯,因為程式碼實際上位於您的 cacheDir 或 test.cache.dir 目錄中。如果您想使用 console.log 語句進行偵錯,請直接編輯它或使用 deps.optimizer?.[mode].force 選項強制重新捆綁。

deps.optimizer.{mode}.enabled ​

  • 類型: boolean
  • 預設: false

啟用依賴項優化。

deps.web ​

  • 類型: { transformAssets?, ... }

當轉換模式設定為 web 時,應用於外部檔案的選項。預設情況下,jsdom 和 happy-dom 使用 web 模式,而 node 和 edge 環境使用 ssr 轉換模式,因此這些選項對這些環境中的檔案沒有影響。

通常,node_modules 中的檔案會被外部化,但這些選項也會影響 server.deps.external 中的檔案。

deps.web.transformAssets ​

  • 類型: boolean
  • 預設: true

Vitest 是否應該處理資產(.png、.svg、.jpg 等)檔案並像 Vite 在瀏覽器中那樣解析它們。

如果未指定查詢,此模組將具有等於資產路徑的預設匯出。

WARNING

目前,此選項僅適用於 vmThreads 和 vmForks 池。

deps.web.transformCss ​

  • 類型: boolean
  • 預設: true

Vitest 是否應該處理 CSS(.css、.scss、.sass 等)檔案並像 Vite 在瀏覽器中那樣解析它們。

如果 CSS 檔案被 css 選項禁用,此選項只會抑制 ERR_UNKNOWN_FILE_EXTENSION 錯誤。

WARNING

目前,此選項僅適用於 vmThreads 和 vmForks 池。

deps.web.transformGlobPattern ​

  • 類型: RegExp | RegExp[]
  • 預設: []

匹配應轉換的外部檔案的正規表達式模式。

預設情況下,node_modules 中的檔案會被外部化且不進行轉換,除非它是 CSS 或資產,並且相應的選項未被禁用。

WARNING

目前,此選項僅適用於 vmThreads 和 vmForks 池。

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 的行為:當未提供工廠且您正在模擬的路徑與其中一個 moduleDirectories 值匹配時,Vitest 將嘗試透過在專案的 根目錄 中尋找 __mocks__ 資料夾來解析模擬。

此選項還會影響在外部化依賴項時檔案是否應被視為模組。預設情況下,Vitest 會使用原生 Node.js 導入外部模組,繞過 Vite 轉換步驟。

設定此選項將_覆寫_預設值,如果您希望仍然在 node_modules 中搜尋套件,請將其與任何其他選項一起包含:

ts
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 ​

已棄用,改用 benchmark.outputJson。

benchmark.outputJson ​

  • 類型: string | undefined
  • 預設: undefined

儲存基準測試結果的檔案路徑,稍後可用於 --compare 選項。

例如:

sh
# 儲存 main 分支的結果
git checkout main
vitest bench --outputJson main.json

# 切換分支並與 main 比較
git checkout feature
vitest bench --compare main.json

benchmark.compare ​

  • 類型: string | undefined
  • 預設: undefined

用於與當前執行進行比較的先前基準測試結果的檔案路徑。

alias ​

  • 類型: Record<string, string> | Array<{ find: string | RegExp, replacement: string, customResolver?: ResolverFunction | ResolverObject }>

在測試中執行時定義自訂別名。它們將與 resolve.alias 中的別名合併。

WARNING

Vitest 使用 Vite SSR 原語來執行測試,這有 某些陷阱。

  1. 別名僅影響由 內聯 模組(所有原始碼預設為內聯)直接使用 import 關鍵字導入的模組。
  2. Vitest 不支援別名 require 呼叫。
  3. 如果您正在別名外部依賴項(例如,react -> preact),您可能希望別名實際的 node_modules 套件,以使其適用於外部化依賴項。 Yarn 和 pnpm 都支援透過 npm: 前綴進行別名。

globals ​

  • 類型: boolean
  • 預設: false
  • CLI: --globals, --globals=false

預設情況下,vitest 不提供全域 API 以保持明確性。如果您喜歡像 Jest 一樣全域使用 API,您可以將 --globals 選項傳遞給 CLI 或在配置中添加 globals: true。

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

export default defineConfig({
  test: {
    globals: true,
  },
});

要使 TypeScript 與全域 API 協同工作,請將 vitest/globals 添加到您的 tsconfig.json 中的 types 欄位:

json
{
  "compilerOptions": {
    "types": ["vitest/globals"]
  }
}

如果您已重新定義 typeRoots 以在編譯中包含更多類型,則必須重新添加 node_modules 以使 vitest/globals 可發現。

json
{
  "compilerOptions": {
    "typeRoots": ["./types", "./node_modules/@types", "./node_modules"],
    "types": ["vitest/globals"]
  }
}

如果您已在專案中使用 unplugin-auto-import,您也可以直接使用它來自動導入這些 API。

ts
import { defineConfig } from 'vitest/config';
import AutoImport from 'unplugin-auto-import/vite';

export default defineConfig({
  plugins: [
    AutoImport({
      imports: ['vitest'],
      dts: true, // 生成 TypeScript 宣告
    }),
  ],
});

environment ​

  • 類型: 'node' | 'jsdom' | 'happy-dom' | 'edge-runtime' | string
  • 預設: 'node'
  • CLI: --environment=<env>

用於測試的環境。Vitest 中的預設環境是 Node.js 環境。如果您正在建構 Web 應用程式,您可以使用透過 jsdom 或 happy-dom 提供的類似瀏覽器的環境。

如果您正在建構邊緣函數,您可以使用 edge-runtime 環境。

TIP

您還可以使用 瀏覽器模式 在瀏覽器中執行整合或單元測試,而無需模擬環境。

透過在檔案頂部添加 @vitest-environment docblock 或註釋,您可以指定用於該檔案中所有測試的另一個環境:

Docblock 樣式:

js
/**
 * @vitest-environment jsdom
 */

test('use jsdom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

註釋樣式:

js
// @vitest-environment happy-dom

test('use happy-dom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

為了與 Jest 相容,還有一個 @jest-environment:

js
/**
 * @jest-environment jsdom
 */

test('use jsdom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

如果您使用 --isolate=false 旗標執行 Vitest,您的測試將按此順序執行:node、jsdom、happy-dom、edge-runtime、自訂環境。這表示每個具有相同環境的測試都會分組,但仍會依序執行。

從 0.23.0 開始,您還可以定義自訂環境。當使用非內建環境時,Vitest 將嘗試載入套件 vitest-environment-${name}。該套件應匯出一個具有 Environment 形狀的物件:

ts
import type { Environment } from 'vitest';

export default <Environment>{
  name: 'custom',
  transformMode: 'ssr',
  setup() {
    // 自訂設定
    return {
      teardown() {
        // 在所有使用此環境的測試執行完畢後呼叫
      },
    };
  },
};

Vitest 還透過 vitest/environments 入口公開 builtinEnvironments,以防您只想擴展它。您可以在 我們的指南 中閱讀有關擴展環境的更多資訊。

TIP

jsdom 環境公開 jsdom 全域變數,其值等於當前的 JSDOM 實例。如果您希望 TypeScript 識別它,您可以在使用此環境時將 vitest/jsdom 添加到您的 tsconfig.json 中:

json
{
  "compilerOptions": {
    "types": ["vitest/jsdom"]
  }
}

environmentOptions ​

  • 類型: Record<'jsdom' | string, unknown>
  • 預設: {}

這些選項會傳遞給當前 environment 的 setup 方法。預設情況下,如果您將 JSDOM 用作測試環境,則只能配置 JSDOM 選項。

environmentMatchGlobs ​

  • 類型: [string, EnvironmentName][]
  • 預設: []

已棄用

此 API 在 Vitest 3 中已棄用。請改用 專案 來定義不同的配置。

ts
export default defineConfig({
  test: {
    environmentMatchGlobs: [ 
      ['./*.jsdom.test.ts', 'jsdom'], 
    ], 
    projects: [ 
      { 
        extends: true, 
        test: { 
          environment: 'jsdom', 
        }, 
      }, 
    ], 
  },
})

根據 glob 模式自動分配環境。將使用第一個匹配項。

例如:

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

export default defineConfig({
  test: {
    environmentMatchGlobs: [
      // tests/dom 中的所有測試都將在 jsdom 中執行
      ['tests/dom/**', 'jsdom'],
      // tests/ 中所有以 .edge.test.ts 結尾的測試都將在 edge-runtime 中執行
      ['**/*.edge.test.ts', 'edge-runtime'],
      // ...
    ],
  },
});

poolMatchGlobs ​

  • 類型: [string, 'threads' | 'forks' | 'vmThreads' | 'vmForks' | 'typescript'][]
  • 預設: []

已棄用

此 API 在 Vitest 3 中已棄用。請改用 專案 來定義不同的配置:

ts
export default defineConfig({
  test: {
    poolMatchGlobs: [ 
      ['./*.threads.test.ts', 'threads'], 
    ], 
    projects: [ 
      { 
        test: { 
          extends: true, 
          pool: 'threads', 
        }, 
      }, 
    ], 
  },
})

根據 glob 模式自動分配測試將在其中執行的池。將使用第一個匹配項。

例如:

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

export default defineConfig({
  test: {
    poolMatchGlobs: [
      // "worker-specific" 目錄中的所有測試都將在 worker 中執行,就像您為它們啟用了 `--pool=threads` 一樣
      ['**/tests/worker-specific/**', 'threads'],
      // 在實際瀏覽器中執行 "browser" 目錄中的所有測試
      ['**/tests/browser/**', 'browser'],
      // 如果您沒有指定其他 glob 模式,所有其他測試將根據 "browser.enabled" 和 "threads" 選項執行
      // ...
    ],
  },
});

update* ​

  • 類型: boolean
  • 預設: false
  • CLI: -u, --update, --update=false

更新快照檔案。這將更新所有已更改的快照並刪除過時的快照。

watch* ​

  • 類型: boolean
  • 預設: !process.env.CI && process.stdin.isTTY
  • CLI: -w, --watch, --watch=false

啟用監聽模式。

在互動式環境中,這是預設值,除非明確指定 --run。

在 CI 中,或從非互動式 shell 執行時,「監聽」模式不是預設值,但可以使用此旗標明確啟用。

watchTriggerPatterns 3.2.0+ * ​

  • 類型: WatcherTriggerPattern[]

Vitest 根據模組圖重新執行測試,該模組圖由靜態和動態 import 語句填充。但是,如果您從檔案系統讀取或從代理獲取,則 Vitest 無法檢測到這些依賴項。

為了正確重新執行這些測試,您可以定義一個正規表達式模式和一個返回要執行測試檔案列表的函數。

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

export default defineConfig({
  test: {
    watchTriggerPatterns: [
      {
        pattern: /^src\/(mailers|templates)\/(.*)\.(ts|html|txt)$/,
        testToRun: (id, match) => {
          // 相對於根值
          return `./api/tests/mailers/${match[2]}.test.ts`;
        },
      },
    ],
  },
});

WARNING

返回的檔案應該是絕對路徑或相對於根目錄的路徑。請注意,這是一個全域選項,不能在 專案 配置中使用。

root ​

  • 類型: string
  • CLI: -r <path>, --root=<path>

專案根目錄。

dir ​

  • 類型: string
  • CLI: --dir=<path>
  • 預設: 與 root 相同

掃描測試檔案的基礎目錄。您可以指定此選項以加快測試發現速度,如果您的根目錄涵蓋整個專案。

reporters* ​

  • 類型: Reporter | Reporter[]
  • 預設: 'default'
  • CLI: --reporter=<name>, --reporter=<name1> --reporter=<name2>

用於輸出的自訂 報告器。報告器可以是 Reporter 實例、用於選擇內建報告器的字串,或自訂實作的路徑(例如 './path/to/reporter.ts'、'@scope/reporter')。

outputFile* ​

  • 類型: string | Record<string, string>
  • CLI: --outputFile=<path>, --outputFile.json=./path

當同時指定 --reporter=json、--reporter=html 或 --reporter=junit 選項時,將測試結果寫入檔案。 透過提供物件而不是字串,您可以在使用多個報告器時定義個別輸出。

pool* ​

  • 類型: 'threads' | 'forks' | 'vmThreads' | 'vmForks'
  • 預設: 'forks'
  • CLI: --pool=threads

用於執行測試的池。

threads* ​

使用 tinypool(Piscina 的輕量級分支)啟用多執行緒。使用執行緒時,您無法使用與處理程序相關的 API,例如 process.chdir()。某些以原生語言編寫的庫,例如 Prisma、bcrypt 和 canvas,在多執行緒中執行時會出現問題並導致段錯誤。在這些情況下,建議改用 forks 池。

forks* ​

與 threads 池類似,但透過 tinypool 使用 child_process 而不是 worker_threads。測試與主處理程序之間的通訊不如 threads 池快。與處理程序相關的 API,例如 process.chdir(),在 forks 池中可用。

vmThreads* ​

在 threads 池中使用 VM 上下文(在沙盒環境中)執行測試。

這會使測試執行更快,但 VM 模組在執行 ESM 程式碼 時不穩定。您的測試會 洩漏記憶體 - 為了解決這個問題,請考慮手動編輯 poolOptions.vmThreads.memoryLimit 值。

WARNING

在沙盒中執行程式碼有一些優點(更快的測試),但也伴隨著許多缺點。

  • 原生模組中的全域變數(例如 fs、path 等)與測試環境中存在的全域變數不同。因此,這些原生模組拋出的任何錯誤都將引用與您的程式碼中使用的錯誤構造函數不同的錯誤構造函數:
ts
try {
  fs.writeFileSync('/doesnt exist');
} catch (err) {
  console.log(err instanceof Error); // false
}
  • 導入 ES 模組會無限期地快取它們,如果您有很多上下文(測試檔案),這會導致記憶體洩漏。Node.js 中沒有 API 可以清除該快取。
  • 在沙盒環境中存取全域變數 需要更長的時間。

請注意使用此選項時的這些問題。Vitest 團隊無法解決我們這邊的任何問題。

vmForks* ​

與 vmThreads 池類似,但透過 tinypool 使用 child_process 而不是 worker_threads。測試與主處理程序之間的通訊不如 vmThreads 池快。與處理程序相關的 API,例如 process.chdir(),在 vmForks 池中可用。請注意,此池具有 vmThreads 中列出的相同陷阱。

poolOptions* ​

  • 類型: Record<'threads' | 'forks' | 'vmThreads' | 'vmForks', {}>
  • 預設: {}

poolOptions.threads ​

threads 池的選項。

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

export default defineConfig({
  test: {
    poolOptions: {
      threads: {
        // 執行緒相關選項在此
      },
    },
  },
});
poolOptions.threads.maxThreads* ​
  • 類型: number | string
  • 預設: 可用 CPU 數量

最大執行緒數或百分比。您也可以使用 VITEST_MAX_THREADS 環境變數。

poolOptions.threads.minThreads* ​
  • 類型: number | string
  • 預設: 可用 CPU 數量

最小執行緒數或百分比。您也可以使用 VITEST_MIN_THREADS 環境變數。

poolOptions.threads.singleThread ​
  • 類型: boolean
  • 預設: false

在單一工作執行緒中執行所有具有相同環境的測試。這將禁用內建模組隔離(您的原始碼或 內聯 程式碼仍將針對每個測試重新評估),但可以提高測試效能。

WARNING

儘管此選項會強制測試一個接一個地執行,但此選項與 Jest 的 --runInBand 不同。Vitest 使用工作執行緒不僅用於並行執行測試,還用於提供隔離。透過禁用此選項,您的測試將依序執行,但在相同的全域上下文中,因此您必須自行提供隔離。

如果您依賴全域狀態(前端框架通常如此)或您的程式碼依賴於為每個測試單獨定義環境,這可能會導致各種問題。但對於不一定依賴全域狀態或可以輕鬆繞過它的測試來說,這可以顯著提高測試速度(最高可達 3 倍)。

poolOptions.threads.useAtomics* ​
  • 類型: boolean
  • 預設: false

使用 Atomics 同步執行緒。

這在某些情況下可以提高效能,但可能會在較舊的 Node 版本中導致段錯誤。

poolOptions.threads.isolate ​
  • Type: boolean
  • Default: true

為每個測試文件隔離環境。

poolOptions.threads.execArgv* ​
  • 類型: string[]
  • 預設: []

將額外參數傳遞給執行緒中的 node。有關更多資訊,請參閱 Command-line API | Node.js。

WARNING

使用時請小心,因為某些選項可能會導致 worker 崩潰,例如 --prof、--title。請參閱 https://github.com/nodejs/node/issues/41103。

poolOptions.forks ​

forks 池的選項。

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

export default defineConfig({
  test: {
    poolOptions: {
      forks: {
        // Forks 相關選項在此
      },
    },
  },
});
poolOptions.forks.maxForks* ​
  • 類型: number | string
  • 預設: 可用 CPU 數量

最大分叉數或百分比。您也可以使用 VITEST_MAX_FORKS 環境變數。

poolOptions.forks.minForks* ​
  • 類型: number | string
  • 預設: 可用 CPU 數量

最小分叉數或百分比。您也可以使用 VITEST_MIN_FORKS 環境變數。

poolOptions.forks.isolate ​
  • 類型: boolean
  • 預設: true

為每個測試檔案隔離環境。

poolOptions.forks.singleFork ​
  • 類型: boolean
  • 預設: false

在單一子處理程序中執行所有具有相同環境的測試。這將禁用內建模組隔離(您的原始碼或 內聯 程式碼仍將針對每個測試重新評估),但可以提高測試效能。

WARNING

儘管此選項會強制測試一個接一個地執行,但此選項與 Jest 的 --runInBand 不同。Vitest 使用子處理程序不僅用於並行執行測試,還用於提供隔離。透過禁用此選項,您的測試將依序執行,但在相同的全域上下文中,因此您必須自行提供隔離。

如果您依賴全域狀態(前端框架通常如此)或您的程式碼依賴於為每個測試單獨定義環境,這可能會導致各種問題。但對於不一定依賴全域狀態或可以輕鬆繞過它的測試來說,這可以顯著提高測試速度(最高可達 3 倍)。

poolOptions.forks.execArgv* ​
  • 類型: string[]
  • 預設: []

將額外參數傳遞給子處理程序中的 node 處理程序。有關更多資訊,請參閱 Command-line API | Node.js。

WARNING

使用時請小心,因為某些選項可能會導致 worker 崩潰,例如 --prof、--title。請參閱 https://github.com/nodejs/node/issues/41103。

poolOptions.vmThreads ​

vmThreads 池的選項。

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

export default defineConfig({
  test: {
    poolOptions: {
      vmThreads: {
        // VM 執行緒相關選項在此
      },
    },
  },
});
poolOptions.vmThreads.maxThreads* ​
  • 類型: number | string
  • 預設: 可用 CPU 數量

最大執行緒數或百分比。您也可以使用 VITEST_MAX_THREADS 環境變數。

poolOptions.vmThreads.minThreads* ​
  • 類型: number | string
  • 預設: 可用 CPU 數量

最小執行緒數或百分比。您也可以使用 VITEST_MIN_THREADS 環境變數。

poolOptions.vmThreads.memoryLimit* ​
  • 類型: string | number
  • 預設: 1 / CPU Cores

指定 worker 在回收之前記憶體限制。此值嚴重依賴於您的環境,因此最好手動指定它而不是依賴預設值。

TIP

實作基於 Jest 的 workerIdleMemoryLimit。

限制可以透過多種方式指定,無論結果如何,都會使用 Math.floor 將其轉換為整數值:

  • <= 1 - 該值被假定為系統記憶體的百分比。因此 0.5 將 worker 的記憶體限制設定為總系統記憶體的一半。
  • > 1 - 假定為固定位元組值。由於先前的規則,如果您想要 1 位元組的值(我不知道為什麼),您可以使用 1.1。
  • 帶單位
    • 50% - 如上,總系統記憶體的百分比。
    • 100KB、65MB 等 - 帶單位表示固定記憶體限制。
      • K / KB - 千位元組 (x1000)
      • KiB - Kibibytes (x1024)
      • M / MB - 兆位元組 - MiB - Mebibytes
      • G / GB - 吉位元組 - GiB - Gibibytes

WARNING

由於報告的系統記憶體不正確,基於百分比的記憶體限制 在 Linux CircleCI worker 上不起作用。

poolOptions.vmThreads.useAtomics* ​
  • 類型: boolean
  • 預設: false

使用 Atomics 同步執行緒。

這在某些情況下可以提高效能,但可能會在較舊的 Node 版本中導致段錯誤。

poolOptions.vmThreads.execArgv* ​
  • 類型: string[]
  • 預設: []

將額外參數傳遞給 VM 上下文中的 node 處理程序。有關更多資訊,請參閱 Command-line API | Node.js。

WARNING

使用時請小心,因為某些選項可能會導致 worker 崩潰,例如 --prof、--title。請參閱 https://github.com/nodejs/node/issues/41103。

poolOptions.vmForks* ​

vmForks 池的選項。

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

export default defineConfig({
  test: {
    poolOptions: {
      vmForks: {
        // VM 分叉相關選項在此
      },
    },
  },
});
poolOptions.vmForks.maxForks* ​
  • 類型: number | string
  • 預設: 可用 CPU 數量

最大分叉數或百分比。您也可以使用 VITEST_MAX_FORKS 環境變數。

poolOptions.vmForks.minForks* ​
  • 類型: number | string
  • 預設: 可用 CPU 數量

最小分叉數或百分比。您也可以使用 VITEST_MIN_FORKS 環境變數。

poolOptions.vmForks.memoryLimit* ​
  • 類型: string | number
  • 預設: 1 / CPU Cores

指定 worker 在回收之前記憶體限制。此值嚴重依賴於您的環境,因此最好手動指定它而不是依賴預設值。值的計算方式在 poolOptions.vmThreads.memoryLimit 中描述。

poolOptions.vmForks.execArgv* ​
  • 類型: string[]
  • 預設: []

將額外參數傳遞給 VM 上下文中的 node 處理程序。有關更多資訊,請參閱 Command-line API | Node.js。

WARNING

使用時請小心,因為某些選項可能會導致 worker 崩潰,例如 --prof、--title。請參閱 https://github.com/nodejs/node/issues/41103。

fileParallelism* ​

  • 類型: boolean
  • 預設: true
  • CLI: --no-file-parallelism, --fileParallelism=false

所有測試檔案是否應並行執行。將此設定為 false 將覆寫 maxWorkers 和 minWorkers 選項為 1。

TIP

此選項不影響在同一檔案中執行的測試。如果您想並行執行這些測試,請在 describe 或透過 配置 使用 concurrent 選項。

maxWorkers* ​

  • 類型: number | string

執行測試的最大 worker 數或百分比。poolOptions.{threads,vmThreads}.maxThreads/poolOptions.forks.maxForks 具有更高的優先級。

minWorkers* ​

  • 類型: number | string

執行測試的最小 worker 數或百分比。poolOptions.{threads,vmThreads}.minThreads/poolOptions.forks.minForks 具有更高的優先級。

testTimeout ​

  • 類型: number
  • 預設: Node.js 中為 5_000,如果 browser.enabled 為 true 則為 15_000
  • CLI: --test-timeout=5000, --testTimeout=5000

測試的預設逾時時間(毫秒)。使用 0 完全禁用逾時。

hookTimeout ​

  • 類型: number
  • 預設: Node.js 中為 10_000,如果 browser.enabled 為 true 則為 30_000
  • CLI: --hook-timeout=10000, --hookTimeout=10000

鉤子的預設逾時時間(毫秒)。使用 0 完全禁用逾時。

teardownTimeout* ​

  • 類型: number
  • 預設: 10000
  • CLI: --teardown-timeout=5000, --teardownTimeout=5000

Vitest 關閉時等待關閉的預設逾時時間(毫秒)。

silent* ​

  • 類型: boolean | 'passed-only'
  • 預設: false
  • CLI: --silent, --silent=false

靜默測試的控制台輸出。

使用 'passed-only' 僅查看失敗測試的日誌。失敗測試的日誌在測試完成後列印。

setupFiles ​

  • 類型: string | string[]

設定檔案的路徑。它們將在每個測試檔案之前執行。

INFO

編輯設定檔案將自動觸發所有測試的重新執行。

您可以在內部使用 process.env.VITEST_POOL_ID(類似整數的字串)來區分執行緒。

TIP

請注意,如果您正在執行 --isolate=false,此設定檔案將在相同的全域範圍內多次執行。這表示您在每個測試之前都存取相同的全域物件,因此請確保您沒有做超出您需要的相同事情。

例如,您可能依賴全域變數:

ts
import { config } from '@some-testing-lib';

if (!globalThis.defined) {
  config.plugins = [myCoolPlugin];
  computeHeavyThing();
  globalThis.defined = true;
}

// 鉤子在每個套件之前重置
afterEach(() => {
  cleanup();
});

globalThis.resetBeforeEachTest = true;

provide 2.1.0+ ​

  • 類型: Partial<ProvidedContext>

定義可以使用 inject 方法在測試中存取的值。

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

export default defineConfig({
  test: {
    provide: {
      API_KEY: '123',
    },
  },
});
ts
import { expect, inject, test } from 'vitest';

test('api key is defined', () => {
  expect(inject('API_KEY')).toBe('123');
});

WARNING

屬性必須是字串,值必須是 可序列化的,因為此物件將在不同處理程序之間傳輸。

TIP

如果您正在使用 TypeScript,您需要擴充 ProvidedContext 類型以進行類型安全存取:

ts
declare module 'vitest' {
  export interface ProvidedContext {
    API_KEY: string;
  }
}

// 將此檔案標記為模組,以便擴充正常工作
export {};

globalSetup ​

  • 類型: string | string[]

全域設定檔案的路徑,相對於專案根目錄。

全域設定檔案可以匯出具名函數 setup 和 teardown,或匯出一個返回 teardown 函數的 default 函數(範例)。

INFO

可以有多個 globalSetup 檔案。setup 和 teardown 會依序執行,teardown 則以相反順序執行。

WARNING

全域設定僅在至少有一個正在執行的測試時執行。這表示全域設定可能會在監聽模式下,在測試檔案更改後開始執行(測試檔案將等待全域設定完成後再執行)。

請注意,全域設定在不同的全域範圍內執行,因此您的測試無法存取此處定義的變數。但是,您可以透過 provide 方法將可序列化的資料傳遞給測試:

ts
import { inject } from 'vitest';

inject('wsPort') === 3000;
ts
import type { TestProject } from 'vitest/node';

export default function setup(project: TestProject) {
  project.provide('wsPort', 3000);
}

declare module 'vitest' {
  export interface ProvidedContext {
    wsPort: number;
  }
}
ts
import type { GlobalSetupContext } from 'vitest/node';

export default function setup({ provide }: GlobalSetupContext) {
  provide('wsPort', 3000);
}

declare module 'vitest' {
  export interface ProvidedContext {
    wsPort: number;
  }
}

從 Vitest 3 開始,您可以定義一個自訂回呼函數,以便在 Vitest 重新執行測試時呼叫。如果該函數是異步的,執行器將等待它完成後再執行測試。請注意,您不能像 { onTestsRerun } 那樣解構 project,因為它依賴於上下文。

ts
import type { TestProject } from 'vitest/node';

export default function setup(project: TestProject) {
  project.onTestsRerun(async () => {
    await restartDb();
  });
}

forceRerunTriggers* ​

  • 類型:string[]
  • 預設: ['**/package.json/**', '**/vitest.config.*/**', '**/vite.config.*/**']

將觸發整個套件重新執行的檔案路徑的 glob 模式。與 --changed 參數搭配使用時,如果觸發器在 git diff 中找到,將執行整個測試套件。

如果您正在測試呼叫 CLI 命令,這會很有用,因為 Vite 無法建構模組圖:

ts
test('execute a script', async () => {
  // 如果 `dist/index.js` 的內容發生變化,Vitest 無法重新執行此測試
  await execa('node', ['dist/index.js']);
});

TIP

請確保您的檔案未被 server.watch.ignored 排除。

coverage* ​

您可以使用 v8、istanbul 或 自訂覆蓋率解決方案 來收集覆蓋率。

您可以使用點符號將覆蓋率選項提供給 CLI:

sh
npx vitest --coverage.enabled --coverage.provider=istanbul --coverage.all

WARNING

如果您使用點符號的覆蓋率選項,請不要忘記指定 --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', '.tsx', '.jsx', '.vue', '.svelte', '.marko', '.astro']
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.extension=<extension>, --coverage.extension=<extension1> --coverage.extension=<extension2>

coverage.exclude ​

  • 類型: string[]
  • 預設:
js
[
  'coverage/**',
  'dist/**',
  '**/node_modules/**',
  '**/[.]**',
  'packages/*/test?(s)/**',
  '**/*.d.ts',
  '**/virtual:*',
  '**/__x00__*',
  '**/\x00*',
  'cypress/**',
  'test?(s)/**',
  'test?(-*).?(c|m)[jt]s?(x)',
  '**/*{.,-}{test,spec,bench,benchmark}?(-d).?(c|m)[jt]s?(x)',
  '**/__tests__/**',
  '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.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 模式從覆蓋率中排除的檔案列表。

此選項會覆寫所有預設選項。在添加要忽略的新模式時擴展預設選項:

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

export default defineConfig({
  test: {
    coverage: {
      exclude: ['**/custom-pattern/**', ...coverageConfigDefaults.exclude],
    },
  },
});

注意

Vitest 會自動將測試檔案的 include 模式添加到 coverage.exclude 中。 無法顯示測試檔案的覆蓋率。

coverage.all ​

  • 類型: boolean
  • 預設: true
  • 適用於提供者: '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

在監聽模式下重新執行時清除覆蓋率報告。設定為 false 以在監聽模式下保留先前執行的覆蓋率結果。

coverage.reportsDirectory ​

  • 類型: string
  • 預設: './coverage'
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.reportsDirectory=<path>

WARNING

如果啟用了 coverage.clean(預設值),Vitest 將在執行測試前刪除此目錄。

寫入覆蓋率報告的目錄。

要在 HTML 報告器 的輸出中預覽覆蓋率報告,此選項必須設定為 HTML 報告目錄的子目錄(例如 ./html/coverage)。

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'],
      ];
    }

您也可以傳遞自訂覆蓋率報告器。有關更多資訊,請參閱 指南 - 自訂覆蓋率報告器。

ts
{
  reporter: [
    // 使用 NPM 套件名稱指定報告器
    '@vitest/custom-coverage-reporter',
    ['@vitest/custom-coverage-reporter', { someOption: true }],

    // 使用本地路徑指定報告器
    '/absolute/path/to/custom-reporter.cjs',
    ['/absolute/path/to/custom-reporter.cjs', { someOption: true }],
  ];
}

您可以在 Vitest UI 中檢查您的覆蓋率報告:有關更多詳細資訊,請參閱 Vitest UI 覆蓋率。

coverage.reportOnFailure ​

  • 類型: boolean
  • 預設: false
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.reportOnFailure, --coverage.reportOnFailure=false

即使測試失敗也生成覆蓋率報告。

coverage.allowExternal ​

  • 類型: boolean
  • 預設: false
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.allowExternal, --coverage.allowExternal=false

收集 專案 root 之外檔案的覆蓋率。

coverage.excludeAfterRemap 2.1.0+ ​

  • 類型: boolean
  • 預設: false
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.excludeAfterRemap, --coverage.excludeAfterRemap=false

在覆蓋率重新映射到原始來源後再次應用排除。 當您的來源檔案經過轉譯並可能包含非來源檔案的來源映射時,這會很有用。

當您看到即使檔案與您的 coverage.exclude 模式匹配,它們仍顯示在報告中時,請使用此選項。

coverage.skipFull ​

  • 類型: boolean
  • 預設: false
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.skipFull, --coverage.skipFull=false

不顯示語句、分支和函數覆蓋率為 100% 的檔案。

coverage.thresholds ​

覆蓋率閾值選項。

如果閾值設定為正數,則將其解釋為所需的最小覆蓋率百分比。例如,將行閾值設定為 90 表示必須覆蓋 90% 的行。

如果閾值設定為負數,則將其視為允許的最大未覆蓋項目數。例如,將行閾值設定為 -10 表示未覆蓋的行數不得超過 10 行。

ts
{
  coverage: {
    thresholds: {
      // 需要 90% 的函數覆蓋率
      functions: 90,

      // 要求未覆蓋的行數不超過 10 行
      lines: -10,
    }
  }
}
coverage.thresholds.lines ​
  • 類型: number
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.lines=<number>

行的全域閾值。

coverage.thresholds.functions ​
  • 類型: number
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.functions=<number>

函數的全域閾值。

coverage.thresholds.branches ​
  • 類型: number
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.branches=<number>

分支的全域閾值。

coverage.thresholds.statements ​
  • 類型: number
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.statements=<number>

語句的全域閾值。

coverage.thresholds.perFile ​
  • 類型: boolean
  • 預設: false
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.perFile, --coverage.thresholds.perFile=false

檢查每個檔案的閾值。

coverage.thresholds.autoUpdate ​
  • 類型: boolean
  • 預設: false
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.autoUpdate=<boolean>

當當前覆蓋率優於配置的閾值時,將所有閾值 lines、functions、branches 和 statements 更新到配置文件。 此選項有助於在覆蓋率提高時維護閾值。

coverage.thresholds.100 ​
  • 類型: boolean
  • 預設: false
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.100, --coverage.thresholds.100=false

將全域閾值設定為 100。 --coverage.thresholds.lines 100 --coverage.thresholds.functions 100 --coverage.thresholds.branches 100 --coverage.thresholds.statements 100 的捷徑。

coverage.thresholds[glob-pattern] ​
  • 類型: { statements?: number functions?: number branches?: number lines?: number }
  • 預設: undefined
  • 適用於提供者: 'v8' | 'istanbul'

為匹配 glob 模式的檔案設定閾值。

注意

Vitest 會將所有檔案(包括 glob 模式涵蓋的檔案)計入全域覆蓋率閾值。 這與 Jest 的行為不同。

ts
{
  coverage: {
    thresholds: {
      // 所有檔案的閾值
      functions: 95,
      branches: 70,

      // 匹配 glob 模式的閾值
      'src/utils/**.ts': {
        statements: 95,
        functions: 90,
        branches: 85,
        lines: 80,
      },

      // 匹配此模式的檔案將只設定行閾值。
      // 不會繼承全域閾值。
      '**/math.ts': {
        lines: 100,
      }
    }
  }
}
coverage.thresholds[glob-pattern].100 2.1.0+ ​
  • 類型: boolean
  • 預設: false
  • 適用於提供者: 'v8' | 'istanbul'

將匹配 glob 模式的檔案的閾值設定為 100。

ts
{
  coverage: {
    thresholds: {
      // 所有檔案的閾值
      functions: 95,
      branches: 70,

      // 匹配 glob 模式的閾值
      'src/utils/**.ts': { 100: true },
      '**/math.ts': { 100: true }
    }
  }
}

coverage.ignoreEmptyLines ​

  • 類型: boolean
  • 預設: true (v1 中為 false)
  • 適用於提供者: 'v8'
  • CLI: --coverage.ignoreEmptyLines=<boolean>

忽略空行、註釋和其他非執行時程式碼,例如 Typescript 類型。需要 experimentalAstAwareRemapping: false。

此選項僅在使用的編譯器從轉譯程式碼中移除註釋和其他非執行時程式碼時才有效。 預設情況下,Vite 使用 ESBuild 從 .ts、.tsx 和 .jsx 檔案中移除註釋和 Typescript 類型。

如果您也想將 ESBuild 應用於其他檔案,請在 esbuild 選項 中定義它們:

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

export default defineConfig({
  esbuild: {
    // 使用 ESBuild 轉譯所有檔案以從程式碼覆蓋率中移除註釋。
    // `test.coverage.ignoreEmptyLines` 正常工作所需:
    include: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.ts', '**/*.tsx'],
  },
  test: {
    coverage: {
      provider: 'v8',
      ignoreEmptyLines: true,
    },
  },
});

coverage.experimentalAstAwareRemapping ​

  • 類型: boolean
  • 預設: false
  • 適用於提供者: 'v8'
  • CLI: --coverage.experimentalAstAwareRemapping=<boolean>

使用實驗性 AST 基礎分析重新映射覆蓋率。與預設模式相比,提供更準確的結果。

coverage.ignoreClassMethods ​

  • 類型: string[]
  • 預設: []
  • 適用於提供者: 'istanbul'
  • CLI: --coverage.ignoreClassMethods=<method>

設定要忽略覆蓋率的類別方法名稱陣列。 有關更多資訊,請參閱 istanbul 文件。

coverage.watermarks ​

  • 類型:
ts
{
  statements?: [number, number],
  functions?: [number, number],
  branches?: [number, number],
  lines?: [number, number]
}
  • 預設:
ts
{
  statements: [50, 80],
  functions: [50, 80],
  branches: [50, 80],
  lines: [50, 80]
}
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.watermarks.statements=50,80, --coverage.watermarks.branches=50,80

語句、行、分支和函數的水印。有關更多資訊,請參閱 istanbul 文件。

coverage.processingConcurrency ​

  • 類型: boolean
  • 預設: Math.min(20, os.availableParallelism?.() ?? os.cpus().length)
  • 適用於提供者: 'v8' | 'istanbul'
  • CLI: --coverage.processingConcurrency=<number>

處理覆蓋率結果時使用的並發限制。

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 字樣的測試將被跳過。

js
import { expect, test } from 'vitest';

// 執行
test('OnlyRunThis', () => {
  expect(true).toBe(true);
});

// 跳過
test('doNotRun', () => {
  expect(true).toBe(true);
});

open* ​

  • 類型: boolean
  • 預設: !process.env.CI
  • CLI: --open, --open=false

開啟 Vitest UI (WIP)

api ​

  • 類型: boolean | number
  • 預設: false
  • CLI: --api, --api.port, --api.host, --api.strictPort

監聽埠並提供 API。設定為 true 時,預設埠為 51204。

browser 實驗性 ​

  • 預設: { enabled: false }
  • CLI: --browser=<name>, --browser.name=chrome --browser.headless

執行瀏覽器測試的配置。請參閱 "瀏覽器配置參考" 文章。

WARNING

這是一個實驗性功能。破壞性變更可能不遵循 SemVer,使用時請固定 Vitest 的版本。

clearMocks ​

  • 類型: boolean
  • 預設: false

將在每個測試之前呼叫所有間諜上的 .mockClear()。 這將清除模擬歷史記錄,而不影響模擬實作。

mockReset ​

  • 類型: boolean
  • 預設: false

將在每個測試之前呼叫所有間諜上的 .mockReset()。 這將清除模擬歷史記錄並將每個實作重置為其原始狀態。

restoreMocks ​

  • 類型: boolean
  • 預設: false

將在每個測試之前呼叫所有間諜上的 .mockRestore()。 這將清除模擬歷史記錄,將每個實作恢復為其原始狀態,並恢復被間諜監視物件的原始描述符。

unstubEnvs ​

  • 類型: boolean
  • 預設: false

將在每個測試之前呼叫 vi.unstubAllEnvs。

unstubGlobals ​

  • 類型: boolean
  • 預設: false

將在每個測試之前呼叫 vi.unstubAllGlobals。

testTransformMode ​

  • 類型: { web?, ssr? }

確定測試中所有模組的轉換方法,這些模組與 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。

TIP

請注意,此物件上的 plugins 欄位將被忽略。

如果您需要透過 pretty-format 插件擴展快照序列化器,請使用 expect.addSnapshotSerializer API 或 snapshotSerializers 選項。

snapshotSerializers* ​

  • 類型: string[]
  • 預設: []

快照測試的快照序列化器模組路徑列表,如果您想添加自訂快照序列化器,這會很有用。有關更多資訊,請參閱 自訂序列化器。

resolveSnapshotPath* ​

  • 類型:(testPath: string, snapExtension: string, context: { config: SerializedConfig }) => string
  • 預設:將快照檔案儲存在 __snapshots__ 目錄中

覆寫預設快照路徑。例如,將快照儲存在測試檔案旁邊:

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

export default defineConfig({
  test: {
    resolveSnapshotPath: (testPath, snapExtension) => testPath + snapExtension,
  },
});

allowOnly ​

  • 類型:boolean
  • 預設:!process.env.CI
  • 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 模組將返回一個代理以不影響執行時。

css.include ​

  • 類型:RegExp | RegExp[]
  • 預設:[]

應返回實際 CSS 並由 Vite 管道處理的檔案的正規表達式模式。

TIP

要處理所有 CSS 檔案,請使用 /.+/。

css.exclude ​

  • 類型:RegExp | RegExp[]
  • 預設:[]

將返回空 CSS 檔案的正規表達式模式。

css.modules ​

  • 類型:{ classNameStrategy? }
  • 預設:{}

css.modules.classNameStrategy ​

  • 類型:'stable' | 'scoped' | 'non-scoped'
  • 預設:'stable'

如果您決定處理 CSS 檔案,您可以配置 CSS 模組中的類別名稱是否應作用域化。您可以選擇以下選項之一:

  • stable:類別名稱將生成為 _${name}_${hashedFilename},這表示如果 CSS 內容更改,生成的類別將保持不變,但如果檔案名稱修改或檔案移動到另一個資料夾,則會更改。此設定在您使用快照功能時很有用。
  • scoped:類別名稱將照常生成,尊重 css.modules.generateScopedName 方法(如果您有且啟用了 CSS 處理)。預設情況下,檔案名稱將生成為 _${name}_${hash},其中 hash 包含檔案名稱和檔案內容。
  • non-scoped:類別名稱將不進行雜湊處理。

WARNING

預設情況下,Vitest 匯出一個代理,繞過 CSS 模組處理。如果您依賴類別上的 CSS 屬性,您必須使用 include 選項啟用 CSS 處理。

maxConcurrency ​

  • 類型:number
  • 預設:5
  • CLI:--max-concurrency=10, --maxConcurrency=10

允許同時執行的標記為 test.concurrent 的測試數量。

超出此限制的測試將排隊等待可用插槽出現時執行。

cache* ​

  • 類型:false
  • CLI:--no-cache, --cache=false

如果您想禁用快取功能,請使用此選項。目前 Vitest 會儲存測試結果的快取,以便首先執行較長和失敗的測試。

快取目錄由 Vite 的 cacheDir 選項控制:

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

export default defineConfig({
  cacheDir: 'custom-folder/.vitest',
});

您可以透過使用 process.env.VITEST 將目錄限制為僅 Vitest:

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

export default defineConfig({
  cacheDir: process.env.VITEST ? 'custom-folder/.vitest' : undefined,
});

sequence ​

  • 類型:{ sequencer?, shuffle?, seed?, hooks?, setupFiles?, groupOrder }

測試應如何排序的選項。

您可以使用點符號將序列選項提供給 CLI:

sh
npx vitest --sequence.shuffle --sequence.seed=1000

sequence.sequencer* ​

  • 類型:TestSequencerConstructor
  • 預設:BaseSequencer

一個自訂類別,定義了分片和排序的方法。如果您只需要重新定義 sort 和 shard 方法中的一個,但兩者都應該存在,您可以從 vitest/node 擴展 BaseSequencer。

分片發生在排序之前,並且僅在提供了 --shard 選項時。

如果指定了 sequencer.groupOrder,則每個組和池都會呼叫一次排序器。

groupOrder 3.2.0+ ​

  • 類型: number
  • 預設: 0

控制此專案在使用多個 專案 時執行測試的順序。

  • 具有相同組順序編號的專案將一起執行,並且組從最低到最高執行。
  • 如果您不設定此選項,所有專案將並行執行。
  • 如果多個專案使用相同的組順序,它們將同時執行。

此設定僅影響專案執行的順序,不影響專案內測試的順序。 要控制測試隔離或專案內測試的順序,請使用 isolate 和 sequence.sequencer 選項。

範例

考慮這個範例:

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

export default defineConfig({
  test: {
    projects: [
      {
        test: {
          name: 'slow',
          sequence: {
            groupOrder: 0,
          },
        },
      },
      {
        test: {
          name: 'fast',
          sequence: {
            groupOrder: 0,
          },
        },
      },
      {
        test: {
          name: 'flaky',
          sequence: {
            groupOrder: 1,
          },
        },
      },
    ],
  },
});

這些專案中的測試將按此順序執行:

 0. slow  |
          |> 一起執行
 0. fast  |

 1. flaky |> 在 slow 和 fast 之後單獨執行

sequence.shuffle ​

  • 類型:boolean | { files?, tests? }
  • 預設:false
  • CLI:--sequence.shuffle, --sequence.shuffle=false

如果您希望檔案和測試隨機執行,可以使用此選項或 CLI 參數 --sequence.shuffle 啟用它。

Vitest 通常使用快取來排序測試,因此長時間執行的測試會更早開始 - 這會使測試執行更快。如果您的檔案和測試將以隨機順序執行,您將失去此效能改進,但這可能有助於追蹤意外依賴先前執行的測試。

sequence.shuffle.files ​

  • 類型:boolean
  • 預設:false
  • CLI:--sequence.shuffle.files, --sequence.shuffle.files=false

是否隨機化檔案,請注意,如果您啟用此選項,長時間執行的測試將不會更早開始。

sequence.shuffle.tests ​

  • 類型:boolean
  • 預設: false
  • CLI:--sequence.shuffle.tests, --sequence.shuffle.tests=false

是否隨機化測試。

sequence.concurrent ​

  • 類型:boolean
  • 預設:false
  • CLI:--sequence.concurrent, --sequence.concurrent=false

如果您希望測試並行執行,可以使用此選項或 CLI 參數 --sequence.concurrent 啟用它。

sequence.seed* ​

  • 類型:number
  • 預設:Date.now()
  • CLI:--sequence.seed=1000

設定隨機化種子,如果測試以隨機順序執行。

sequence.hooks ​

  • 類型:'stack' | 'list' | 'parallel'
  • 預設:'stack'
  • CLI:--sequence.hooks=<value>

更改鉤子執行的順序。

  • stack 將以相反順序排序「after」鉤子,「before」鉤子將按其定義順序執行。
  • list 將按其定義順序排序所有鉤子。
  • parallel 將並行執行單一組中的鉤子(父套件中的鉤子仍將在當前套件的鉤子之前執行)。

TIP

此選項不影響 onTestFinished。它總是按相反順序呼叫。

sequence.setupFiles ​

  • 類型:'list' | 'parallel'
  • 預設:'parallel'
  • CLI:--sequence.setupFiles=<value>

更改設定檔案執行的順序。

  • list 將按其定義順序執行設定檔案。
  • parallel 將並行執行設定檔案。

typecheck ​

配置 類型檢查 測試環境的選項。

typecheck.enabled ​

  • 類型:boolean
  • 預設:false
  • CLI:--typecheck, --typecheck.enabled

啟用類型檢查以及常規測試。

typecheck.only ​

  • 類型:boolean
  • 預設:false
  • CLI:--typecheck.only

當啟用類型檢查時,僅執行類型檢查測試。使用 CLI 時,此選項將自動啟用類型檢查。

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 的路徑,相對於專案根目錄。

typecheck.spawnTimeout ​

  • 類型:number
  • 預設:10_000

產生類型檢查器所需的最小時間(毫秒)。

slowTestThreshold* ​

  • 類型:number
  • 預設:300
  • CLI:--slow-test-threshold=<number>, --slowTestThreshold=<number>

測試或套件被視為緩慢並在結果中報告的毫秒數。

chaiConfig ​

  • 類型: { includeStack?, showDiff?, truncateThreshold? }
  • 預設: { includeStack: false, showDiff: true, truncateThreshold: 40 }

等同於 Chai config。

chaiConfig.includeStack ​

  • 類型: boolean
  • 預設: false

影響斷言錯誤訊息中是否包含堆疊追蹤。預設為 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 將執行所有測試案例,即使其中一些失敗。這對於 CI 建置可能不是理想的,因為您只對 100% 成功的建置感興趣,並希望在測試失敗時盡早停止測試執行。bail 選項可用於透過在發生失敗時阻止其執行更多測試來加快 CI 執行。

retry ​

  • 類型: number
  • 預設: 0
  • CLI: --retry=<value>

如果測試失敗,則重試指定次數。

onConsoleLog* ​

  • 類型:(log: string, type: 'stdout' | 'stderr') => boolean | void

console.log 在測試中的自訂處理器。如果您返回 false,Vitest 將不會將日誌列印到控制台。

對於過濾掉第三方庫的日誌很有用。

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

export default defineConfig({
  test: {
    onConsoleLog(log: string, type: 'stdout' | 'stderr'): boolean | void {
      return !(log === 'message from third party library' && type === 'stdout');
    },
  },
});

onStackTrace* ​

  • 類型:(error: Error, frame: ParsedStack) => boolean | void

在處理錯誤時,對每個堆疊追蹤的每個框架應用過濾函數。第一個參數 error 是一個物件,其屬性與標準 Error 相同,但它不是實際的實例。

對於過濾掉第三方庫的堆疊追蹤框架很有用。

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

export default defineConfig({
  test: {
    onStackTrace(error: Error, { file }: ParsedStack): boolean | void {
      // 如果我們遇到 ReferenceError,則顯示整個堆疊。
      if (error.name === 'ReferenceError') {
        return;
      }

      // 拒絕所有來自第三方庫的框架。
      if (file.includes('node_modules')) {
        return false;
      }
    },
  },
});

diff ​

  • 類型: string
  • CLI: --diff=<path>

DiffOptions 物件或匯出 DiffOptions 的模組路徑。如果您想自訂差異顯示,這會很有用。

例如,作為配置物件:

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

export default defineConfig({
  test: {
    diff: {
      aIndicator: c.bold('--'),
      bIndicator: c.bold('++'),
      omitAnnotationLines: true,
    },
  },
});

或作為模組:

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

export default defineConfig({
  test: {
    diff: './vitest.diff.ts',
  },
});
ts
import type { DiffOptions } from 'vitest';
import c from 'picocolors';

export default {
  aIndicator: c.bold('--'),
  bIndicator: c.bold('++'),
  omitAnnotationLines: true,
} satisfies DiffOptions;

diff.expand ​

  • 類型:boolean
  • 預設:true
  • CLI: --diff.expand=false

展開所有共同行。

diff.truncateThreshold ​

  • 類型:number
  • 預設:0
  • CLI: --diff.truncateThreshold=<path>

要顯示的差異結果的最大長度。超出此閾值的差異將被截斷。 截斷不會在預設值 0 時生效。

diff.truncateAnnotation ​

  • 類型:string
  • 預設:'... Diff result is truncated'
  • CLI: --diff.truncateAnnotation=<annotation>

如果差異結果被截斷,則在差異結果末尾輸出的註釋。

diff.truncateAnnotationColor ​

  • 類型:DiffOptionsColor = (arg: string) => string
  • 預設:noColor = (string: string): string => string

截斷註釋的顏色,預設為無顏色輸出。

diff.printBasicPrototype ​

  • 類型:boolean
  • 預設:false

在差異輸出中列印基本原型 Object 和 Array。

diff.maxDepth ​

  • 類型:number
  • 預設:20 (或比較不同類型時為 8)

限制列印巢狀物件時遞歸的深度。

fakeTimers ​

  • 類型: FakeTimerInstallOpts

Vitest 在使用 vi.useFakeTimers() 時將傳遞給 @sinon/fake-timers 的選項。

fakeTimers.now ​

  • 類型: number | Date
  • 預設: Date.now()

使用指定的 Unix 紀元安裝假計時器。

fakeTimers.toFake ​

  • 類型: ('setTimeout' | 'clearTimeout' | 'setImmediate' | 'clearImmediate' | 'setInterval' | 'clearInterval' | 'Date' | 'nextTick' | 'hrtime' | 'requestAnimationFrame' | 'cancelAnimationFrame' | 'requestIdleCallback' | 'cancelIdleCallback' | 'performance' | 'queueMicrotask')[]
  • 預設: 全域可用的所有內容,除了 nextTick 和 queueMicrotask

要模擬的全域方法和 API 名稱陣列。

要僅模擬 setTimeout() 和 nextTick(),請將此屬性指定為 ['setTimeout', 'nextTick']。

當在 node:child_process 中使用 --pool=forks 執行 Vitest 時,不支援模擬 nextTick。NodeJS 在 node:child_process 內部使用 process.nextTick,當它被模擬時會掛起。當使用 --pool=threads 執行 Vitest 時,支援模擬 nextTick。

fakeTimers.loopLimit ​

  • 類型: number
  • 預設: 10_000

呼叫 vi.runAllTimers() 時將執行的最大計時器數。

fakeTimers.shouldAdvanceTime ​

  • 類型: boolean
  • 預設: false

告訴 @sinonjs/fake-timers 根據實際系統時間偏移自動增加模擬時間(例如,模擬時間將根據實際系統時間每 20 毫秒增加 20 毫秒)。

fakeTimers.advanceTimeDelta ​

  • 類型: number
  • 預設: 20

僅在使用 shouldAdvanceTime: true 時相關。每當實際系統時間變化 advanceTimeDelta 毫秒時,模擬時間增加 advanceTimeDelta 毫秒。

fakeTimers.shouldClearNativeTimers ​

  • 類型: boolean
  • 預設: true

告訴假計時器透過委派給其各自的處理器來清除「原生」(即非假)計時器。禁用時,如果計時器在啟動假計時器會話之前存在,可能會導致潛在的意外行為。

workspace* ​

已棄用

此選項已棄用,將在下一個主要版本中移除。請改用 projects。

  • 類型: string | TestProjectConfiguration[]
  • CLI: --workspace=./file.js
  • 預設: 靠近配置檔案或根目錄的 vitest.{workspace,projects}.{js,ts,json}

工作區 配置檔案的路徑,相對於 根目錄。

從 Vitest 3 開始,您也可以在根配置中定義工作區陣列。如果在配置中手動定義了 workspace,Vitest 將忽略根目錄中的 vitest.workspace 檔案。

projects* ​

  • 類型: TestProjectConfiguration[]
  • 預設: []

專案 陣列。

isolate ​

  • 類型: boolean
  • 預設: true
  • CLI: --no-isolate, --isolate=false

在隔離環境中執行測試。此選項對 vmThreads 和 vmForks 池沒有影響。

禁用此選項可能會 提高效能,如果您的程式碼不依賴副作用(對於 node 環境的專案通常如此)。

TIP

您可以透過使用 poolOptions 屬性來禁用特定池的隔離。

includeTaskLocation ​

  • 類型: boolean
  • 預設: false

當 Vitest API 在 報告器 中接收任務時,是否應包含 location 屬性。如果您有很多測試,這可能會導致輕微的效能下降。

location 屬性具有 column 和 line 值,這些值對應於原始檔案中 test 或 describe 的位置。

如果您沒有明確禁用此選項,並且您正在使用以下方式執行 Vitest,此選項將自動啟用:

  • Vitest UI
  • 或在沒有 headless 模式的情況下使用 瀏覽器模式
  • 或使用 HTML 報告器

TIP

如果您不使用依賴此功能的自訂程式碼,此選項沒有任何作用。

snapshotEnvironment ​

  • 類型: string

自訂快照環境實作的路徑。如果您在不支援 Node.js API 的環境中執行測試,這會很有用。此選項對瀏覽器執行器沒有任何影響。

此物件應具有 SnapshotEnvironment 的形狀,並用於解析和讀取/寫入快照檔案:

ts
export interface SnapshotEnvironment {
  getVersion: () => string;
  getHeader: () => string;
  resolvePath: (filepath: string) => Promise<string>;
  resolveRawPath: (testPath: string, rawPath: string) => Promise<string>;
  saveSnapshotFile: (filepath: string, snapshot: string) => Promise<void>;
  readSnapshotFile: (filepath: string) => Promise<string | null>;
  removeSnapshotFile: (filepath: string) => Promise<void>;
}

如果您只需要覆寫 API 的一部分,您可以從 vitest/snapshot 入口點擴展預設的 VitestSnapshotEnvironment。

WARNING

這是一個低階選項,僅應在您無法存取預設 Node.js API 的進階情況下使用。

如果您只需要配置快照功能,請使用 snapshotFormat 或 resolveSnapshotPath 選項。

env ​

  • 類型: Partial<NodeJS.ProcessEnv>

測試期間在 process.env 和 import.meta.env 上可用的環境變數。這些變數在主處理程序中(例如在 globalSetup 中)將不可用。

expect ​

  • 類型: ExpectOptions

expect.requireAssertions ​

  • 類型: boolean
  • 預設: false

與在每個測試開始時呼叫 expect.hasAssertions() 相同。這確保沒有測試會意外通過。

TIP

這僅適用於 Vitest 的 expect。如果您使用 assert 或 .should 斷言,它們將不計數,並且您的測試將因缺少 expect 斷言而失敗。

您可以透過呼叫 vi.setConfig({ expect: { requireAssertions: false } }) 來更改此值。該配置將應用於每個後續的 expect 呼叫,直到手動呼叫 vi.resetConfig。

expect.poll ​

expect.poll 的全域配置選項。這些選項與您可以傳遞給 expect.poll(condition, options) 的選項相同。

expect.poll.interval ​
  • 類型: number
  • 預設: 50

輪詢間隔(毫秒)。

expect.poll.timeout ​
  • 類型: number
  • 預設: 1000

輪詢逾時(毫秒)。

printConsoleTrace ​

  • 類型: boolean
  • 預設: false

呼叫任何 console 方法時始終列印控制台追蹤。這對於偵錯很有用。

attachmentsDir 3.2.0+ ​

  • 類型: string
  • 預設: '.vitest-attachments'

用於儲存由 context.annotate 建立的附件的目錄路徑,相對於專案根目錄。

Pager
上一頁功能特色
下一頁測試 API 參考

以 MIT 授權條款 發布。

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

https://vitest.dev/config/

以 MIT 授權條款 發布。

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