開始使用
概觀
Vitest 是一個由 Vite 驅動的快速單元測試框架。
您可以在 為何選擇 Vitest 章節中了解更多關於此專案背後的理念。
線上試用 Vitest
您可以在 StackBlitz 上線上試用 Vitest。它直接在瀏覽器中執行 Vitest,與本機設定幾乎相同,但不需要在您的機器上安裝任何東西。
將 Vitest 加入您的專案
觀看影片學習安裝方法npm install -D vitestyarn add -D vitestpnpm add -D vitestTIP
Vitest 需要 Vite >=v3.0.0 和 Node >=v14.18
建議您採用上述任一方法,在 package.json 中安裝 vitest。如果您希望直接執行 vitest,可以使用 npx vitest(npx 命令隨附於 npm 和 Node.js)。
預設情況下,npx 會檢查命令是否存在於 $PATH 或本機專案的二進位檔案中,並執行該命令。如果找不到命令,則會在執行前自動安裝。
編寫測試
作為範例,我們將編寫一個簡單的測試,以驗證一個將兩個數字相加的函數的輸出。
// sum.js
export function sum(a, b) {
return a + b;
}// sum.test.js
import { expect, test } from 'vitest';
import { sum } from './sum';
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});接下來,為了執行測試,請將以下程式碼片段添加到您的 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 311ms (transform 23ms, setup 0ms, collect 16ms, tests 2ms, environment 0ms, prepare 106ms)若要深入了解 Vitest 的使用方式,請參閱 API 章節。
配置 Vitest
Vitest 的主要優勢之一,在於它與 Vite 採用統一配置。如果存在 vite.config.ts,vitest 會讀取此根目錄檔案,以符合您 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: {
// ...
},
});請參閱 配置參考 中的配置選項列表
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 setup。
import { defineWorkspace } from 'vitest/config';
export default defineWorkspace([
// you can use a list of glob patterns to define your workspaces
// Vitest expects a list of config files
// or directories where there is a config file
'packages/*',
'tests/*/vitest.config.{e2e,unit}.ts',
// you can even run the same tests,
// but with different configs in the same "vitest" process
{
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 scripts 中的 vitest 二進位檔案,或使用 npx vitest 直接執行。以下是預設的 Vitest 專案中的預設 npm 指令碼:
{
"scripts": {
"test": "vitest",
"coverage": "vitest run --coverage"
}
}若要執行單次測試,而不監看檔案變更,請使用 vitest run。 您可以指定其他 CLI 選項,例如 --port 或 --https。如需完整的 CLI 選項清單,請在您的專案中執行 npx vitest --help。
了解更多有關 命令列介面
IDE 整合
我們也為 Visual Studio Code 提供官方擴充功能,以提升您使用 Vitest 的測試體驗。
了解更多有關 IDE 整合
範例
| 範例 | 來源 | Playground |
|---|---|---|
basic | GitHub | 線上體驗 |
fastify | GitHub | 線上體驗 |
graphql | GitHub | 線上體驗 |
image-snapshot | GitHub | 線上體驗 |
lit | GitHub | 線上體驗 |
mocks | GitHub | 線上體驗 |
nextjs | GitHub | 線上體驗 |
playwright | GitHub | |
puppeteer | GitHub | |
react-enzyme | GitHub | 線上體驗 |
react-mui | GitHub | 線上體驗 |
react-storybook | GitHub | 線上體驗 |
react-testing-lib-msw | GitHub | 線上體驗 |
react-testing-lib | GitHub | 線上體驗 |
react | GitHub | 線上體驗 |
ruby | GitHub | 線上體驗 |
solid | GitHub | 線上體驗 |
svelte | GitHub | 線上體驗 |
vitesse | GitHub | 線上體驗 |
vue-jsx | GitHub | 線上體驗 |
vue | GitHub | 線上體驗 |
vue2 | 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
使用未發布的版本
如果您想搶先體驗最新功能,需要將 vitest repo 克隆到本機,然後自行建置並連結(需要 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 與社群交流。