開始使用
概述
Vitest (發音為 "veetest") 是一個由 Vite 驅動的次世代測試框架。
您可以在為何選擇 Vitest 章節中,深入了解此專案的設計理念。
線上體驗 Vitest
您可以在 StackBlitz 線上體驗 Vitest。它直接在瀏覽器中執行 Vitest,其行為幾乎與本機設定無異,且無需在您的機器上安裝任何軟體。
將 Vitest 加入專案
透過影片學習如何安裝npm install -D vitestyarn add -D vitestpnpm add -D vitestbun add -D vitestTIP
Vitest 需要 Vite >=v5.0.0 和 Node >=v18.0.0。
建議您使用上述任一方法,在 package.json 中安裝 vitest。然而,如果您偏好直接執行 vitest,則可使用 npx vitest(npx 工具隨 npm 和 Node.js 一併提供)。
npx 工具會執行指定的命令。預設情況下,npx 會先檢查命令是否存在於本地專案的二進位檔案中。若找不到,npx 會在系統的 $PATH 中尋找並執行。如果這兩個位置都找不到命令,npx 會在執行前將其安裝到暫存位置。
編寫測試
舉例來說,我們將編寫一個簡單的測試,以驗證一個將兩個數字相加的函數的輸出。
// sum.js
export function sum(a, b) {
return a + b;
}// sum.test.js
import { expect, test } from 'vitest';
import { sum } from './sum.js';
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});TIP
預設情況下,測試檔案名稱必須包含 ".test." 或 ".spec." 字串。
接下來,為了執行測試,請將以下內容添加到您的 package.json 中:
{
"scripts": {
"test": "vitest"
}
}最後,根據您的套件管理工具,執行 npm run test、yarn test 或 pnpm test,Vitest 將顯示此訊息:
✓ sum.test.js (1)
✓ adds 1 + 2 to equal 3
Test Files 1 passed (1)
Tests 1 passed (1)
Start at 02:15:44
Duration 311msWARNING
如果您使用 Bun 作為套件管理工具,請務必使用 bun run test 命令而非 bun test,否則 Bun 將執行其自身的測試執行器。
欲了解更多 Vitest 的用法,請參閱 API 章節。
配置 Vitest
Vitest 的主要優勢之一是它與 Vite 的統一配置。如果存在,vitest 將讀取您的根 vite.config.ts,以匹配您的 Vite 應用程式的插件和設定。例如,您的 Vite resolve.alias 和 plugins 配置將立即生效。如果您想在測試期間使用不同的配置,可以透過以下方式達成:
- 建立
vitest.config.ts,它將具有更高的優先級。 - 將
--config選項傳遞給 CLI,例如vitest --config ./path/to/vitest.config.ts。 - 使用
process.env.VITEST或defineConfig上的mode屬性(此屬性若未覆蓋,將設定為test),在vite.config.ts中有條件地應用不同的配置。
Vitest 支援與 Vite 相同的配置檔案副檔名:.js、.mjs、.cjs、.ts、.cts、.mts。Vitest 不支援 .json 副檔名。
如果您不使用 Vite 作為建置工具,可以在配置檔案中使用 test 屬性來配置 Vitest:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
// ...
},
});TIP
即使您不使用 Vite,Vitest 仍然高度依賴其轉換流程。因此,您也可以配置 Vite 文件中描述的任何屬性。
如果您已經在使用 Vite,請在您的 Vite 配置中添加 test 屬性。您還需要在配置檔案的頂部使用 三斜線指示詞 引用 Vitest 的類型。
/// <reference types="vitest" />
import { defineConfig } from 'vite';
export default defineConfig({
test: {
// ...
},
});<reference types="vitest" /> 將在 Vitest 3 中失效,但您可以在 Vitest 2.1 中開始遷移到 vitest/config:
/// <reference types="vitest/config" />
import { defineConfig } from 'vite';
export default defineConfig({
test: {
// ... 在此指定選項。
},
});配置選項列表請參閱 配置參考。
WARNING
如果您決定為 Vite 和 Vitest 使用兩個單獨的配置檔案,請確保在您的 Vitest 配置檔案中定義相同的 Vite 選項,因為 Vitest 配置將覆蓋您的 Vite 設定,而非延伸。您還可以使用來自 vite 或 vitest/config 模組的 mergeConfig 方法來合併 Vite 配置與 Vitest 配置:
import { defineConfig, mergeConfig } from 'vitest/config';
import viteConfig from './vite.config.mjs';
export default mergeConfig(
viteConfig,
defineConfig({
test: {
// ...
},
})
);import { defineConfig } from 'vite';
import Vue from '@vitejs/plugin-vue';
export default defineConfig({
plugins: [Vue()],
});然而,我們建議為 Vite 和 Vitest 使用同一個設定檔,而非建立兩個單獨的檔案。
工作區支援
使用 Vitest 工作區 在同一專案中執行不同的配置。您可以在 vitest.workspace 檔案中定義一個檔案和資料夾的列表,以定義您的工作區。該檔案支援 js/ts/json 副檔名。此功能非常適合 monorepo 設定。
import { defineWorkspace } from 'vitest/config';
export default defineWorkspace([
// 您可以使用 glob 模式列表來定義您的工作區
// Vitest 期望一個配置檔案列表
// 或包含配置檔案的目錄
'packages/*',
'tests/*/vitest.config.{e2e,unit}.ts',
// 您甚至可以在同一個「vitest」程序中執行相同的測試,
// 但採用不同的配置
{
test: {
name: 'happy-dom',
root: './shared_tests',
environment: 'happy-dom',
setupFiles: ['./setup.happy-dom.ts'],
},
},
{
test: {
name: 'node',
root: './shared_tests',
environment: 'node',
setupFiles: ['./setup.node.ts'],
},
},
]);命令列介面
在安裝了 Vitest 的專案中,您可以在 npm 腳本中使用 vitest 二進位檔案,或直接使用 npx vitest 執行它。以下是透過腳手架建立的 Vitest 專案中的預設 npm 腳本:
{
"scripts": {
"test": "vitest",
"coverage": "vitest run --coverage"
}
}若要執行一次測試而不監控檔案變更,請使用 vitest run。 您可以指定其他 CLI 選項,例如 --port 或 --https。有關 CLI 選項的完整列表,請在您的專案中執行 npx vitest --help。
了解更多關於 命令列介面
自動安裝依賴項
如果某些依賴項尚未安裝,Vitest 將會提示您進行安裝。您可以藉由設定 VITEST_SKIP_INSTALL_CHECKS=1 環境變數來禁用此行為。
IDE 整合
我們也為 Visual Studio Code 提供了官方擴充套件,以增強您使用 Vitest 的測試體驗。
了解更多關於 IDE 整合
範例
| 範例 | 原始碼 | 線上體驗 |
|---|---|---|
basic | GitHub | 線上體驗 |
fastify | GitHub | 線上體驗 |
in-source-test | GitHub | 線上體驗 |
lit | GitHub | 線上體驗 |
vue | GitHub | 線上體驗 |
marko | GitHub | 線上體驗 |
preact | GitHub | 線上體驗 |
react | GitHub | 線上體驗 |
solid | GitHub | 線上體驗 |
svelte | GitHub | 線上體驗 |
sveltekit | GitHub | 線上體驗 |
profiling | GitHub | 不可用 |
typecheck | GitHub | 線上體驗 |
workspace | GitHub | 線上體驗 |
使用 Vitest 的專案
- unocss
- unplugin-auto-import
- unplugin-vue-components
- vue
- vite
- vitesse
- vitesse-lite
- fluent-vue
- vueuse
- milkdown
- gridjs-svelte
- spring-easing
- bytemd
- faker
- million
- Vitamin
- neodrag
- svelte-multiselect
- iconify
- tdesign-vue-next
- cz-git
使用未發布的提交
主分支上的每個 commit 以及帶有 cr-tracked 標籤的 PR 都會發布到 pkg.pr.new。您可以使用 npm i https://pkg.pr.new/vitest@{commit} 安裝它。
如果您想在本地測試自己的修改,您可以自行建構並連結(需要 pnpm):
git clone https://github.com/vitest-dev/vitest.git
cd vitest
pnpm install
cd packages/vitest
pnpm run build
pnpm link --global # 您可以使用您偏好的套件管理工具來執行此步驟然後進入您使用 Vitest 的專案並執行 pnpm link --global vitest(或您用於全域連結 vitest 的套件管理工具)。
社群
如果您有問題或需要協助,請透過 Discord 和 GitHub Discussions 與社群聯繫。