快速开始
概述
Vitest 是一个由 Vite 提供支持的极速单元测试框架。
你可以在为什么是 Vitest ?了解更多关于这个项目背后的基本原理。
线上构建
你可以通过 StackBlitz 在线使用 Vitest。StackBlitz 直接在浏览器里运行 Vitest ,所以它和在本地设置几乎完全一致,但不需要在机器上安装任何依赖。
将 Vitest 添加到项目中
// 使用 npm$ npm install -D vitest// 使用 yarn$ yarn add -D vitest// 使用 pnpm$ pnpm add -D vitest
:::tip 提示 Vitest 需要 Vite >= v2.7.10 和 Node >= v14 :::
配置 Vitest
Vitest 的主要优势之一是它与 Vite 共用一套配置。如果存在配置文件,Vitest 将读取根目录下的 vite.config.ts 以匹配插件并设置为您的 Vite 应用程序。 例如,Vite 的 resolve.alias 和 plugins 的配置将会是开箱即用。如果你想使用不同的配置进行测试,你可以:
- 创建
vitest.config.ts,优先级更高。 - 将
--config选项传递给 CLI,例如vitest --config ./path/to/vitest.config.ts。 - 在
defineConfig中使用process.env.VITEST或mode属性(默认值是test)在vite.config.ts中有条件的应用不同的配置。
要配置 vitest 本身,请在你的 Vite 配置中添加 test 属性。如果你使用 vite 的 defineConfig 你还需要将 三斜线指令 写在配置文件的顶部。
使用 vite 的 defineConfig 可以参考下面的格式:
/// <reference types="vitest" />import { defineConfig } from 'vite'export default defineConfig({test: {// ...},})
使用 vitest 的 defineConfig 可以参考下面的格式:
import { defineConfig } from 'vitest/config'export default defineConfig({test: {// ...},})
具体参阅 配置参考 中的配置选项列表。
命令行
在安装了 Vitest 的项目中,你可以在 npm 脚本中运行 vitest 的二进制文件,或者直接运行 npx vitest。以下 Vitest 脚手架项目中的默认的 npm 脚本:
{"scripts": {"test": "vitest","coverage": "vitest run --coverage"}}
要在不监听文件更改的情况下只运行一次测试,请使用 vitest run。
你可以指定其他 CLI 选项,例如 --port 或 --https。
有关 CLI 选项的完整列表,在项目中运行 npx vitest --help。
命令
vitest watch运行所有的测试套件,但要注意文件更改时会重新运行相关测试,直接调用
vitest同样如此。在 CI 环境中,此命令将回退到vitest runvitest run非监听模式下运行单次测试。
vitest dev在开发模式下运行 Vitest 。
vitest related仅运行涵盖了源文件列表的测试。适用于静态惰性导入,但不适用于动态导入。所有文件都应相对于根目录文件夹。
适用于与
lint-staged或 CI 设置一起运行。vitest related /src/index.ts /src/hello-world.js
选项
| 选项 | |
|---|---|
-v, --version |
显示版本号 |
-r, --root <path> |
定义项目的根目录 |
-c, --config <path> |
配置文件的路径 |
-u, --update |
更新快照 |
-w, --watch |
智能文件监听模式 |
-t, --testNamePattern <pattern> |
运行文件名与模式匹配的测试 |
--ui |
启用 UI |
--open |
如果启用,则自动打开 UI(默认值:true) |
--api [api] |
服务 API,可用选项: --api.port <port>, --api.host [host] 和 --api.strictPort |
--threads |
启用多线程(默认值:true) |
--silent |
运行测试时控制台静默输出 |
--isolate |
隔离每个测试文件的运行环境(默认值是 true) |
--reporter <name> |
选择输出格式:default、verbose、dot、junit 或 json |
--outputFile <filename/-s> |
当指定了 --reporter=json 或 --reporter=junit 选项时,将测试结果写入文件 通过 cac’s dot notation 你还可以为多个报告器指定单独的输出 |
--coverage |
使用 c8 输出代码测试覆盖率 |
--run |
不使用监听模式 |
--mode |
覆盖 Vite 的模式,默认值为 test |
--mode <name> |
覆写 Vite 的模式(默认值是 test) |
--globals |
全局注入 API |
--dom |
用 happy-dom 模拟浏览器 api |
--environment <env> |
运行测试的环境(默认值是 node) |
--passWithNoTests |
未找到测试时通过 |
--allowOnly |
只允许标记 only 的测试套件和测试样例 (默认值:在 CI 中为 false,其他地方为 true) |
-h, --help |
显示可用的 CLI 选项 |
示例
使用 Vitest 的项目
- unocss
- unplugin-auto-import
- unplugin-vue-components
- vitesse
- vitesse-lite
- fluent-vue
- vueuse
- milkdown
- gridjs-svelte
- spring-easing
- bytemd
- faker
- million
- Vitamin
- neodrag
- svelte-multiselect
- iconify
使用未发布的版本
如果您等不及想要使用最新功能的 Vitest, 则需要将 vitest 官方仓库下载到本地计算机上,然后自行构建和链接(需要使用 pnpm ):
git clone https://github.com/vitest-dev/vitest.gitcd vitestpnpm installcd packages/vitestpnpm run buildpnpm link --global # 可以在此步骤中使用自己喜欢的包管理器
然后转到使用 Vitest 的项目中运行 pnpm link --global vitest (或者其他你用来全局链接 vitest 的包管理器)。
社区
如果你有问题或需要帮助,可以通过 Discord 和 GitHub Discussions 与社区联系。
