这是什么?
Vitest 是一个由 Vite 驱动的新一代 JavaScript 和 TypeScript 测试框架。它借助你现有的 Vite 配置来运行单元测试和组件测试。
Vitest 是框架还是库?它和 Jest 是什么关系?
它是一个构建在 Vite 之上的完整测试框架:复用 Vite 的配置、转换器、解析器和插件,并提供与 Jest 兼容的 API(expect、mock、spy、快照),所以从 Jest 过来会觉得非常熟悉。
我怎么在自己的项目里把它跑起来?
把它作为开发依赖安装(npm install -D vitest),然后运行 'vitest' 命令行工具。它以 ESM 优先,会自动读取应用现有的 vite 配置和插件,所以大多数项目不需要单独的测试配置。
我需要先装什么特定的东西吗?
需要——项目里要有 Node >=v22.12.0(22.12、24 或 26+)和 Vite >=v6.4.0。除此之外没有强制要求;只有你主动启用浏览器模式(Browser Mode)时才会用到浏览器。
如果我是从 Jest 或旧环境迁移过来的,需要注意什么?
最主要的问题是版本下限:使用较旧 Node 或 Vite 的项目必须先升级。从 Jest 本身迁移则很容易,因为 expect API、mock、stub、spy 和快照都是兼容的。
除了跑单元测试,它还能做什么?
它可以通过 v8 或 istanbul 统计原生代码覆盖率,用 Tinybench 跑基准测试,用 expect-type 做类型层面的测试,还支持分片(sharding),把一次测试拆到多台机器上运行。
它能测试 Vue、React 或 Svelte 的组件吗?
可以——开箱即用地支持 Vue、React、Svelte、Lit 和 Marko 的组件测试,还提供浏览器模式(Browser Mode),让测试直接在浏览器里原生运行。在 Node 环境下,它也可以通过 JSDOM 或 happy-dom 来 mock DOM 和浏览器 API。
为什么大家都说它快?
它的监听模式(watch mode)的工作方式类似 Vite 的 HMR:智能且即时,你修改代码后只重跑受影响的部分,而不是整个测试套件。测试还可以并发运行并进行筛选。
我需要自己配置 TypeScript、JSX 或 ESM 支持吗?
不需要——TypeScript 和 JSX 开箱即用,而且 Vitest 以 ESM 优先,原生支持顶层的 await。
What are similar projects?
mocha, pest, playwright, javascript-testing-best-practices, enzyme, todomvc, qiankun, karma
Which topics is it in?
test, jest, tdd, esm, testing-tools, benchmarking, unit-testing, svelte, vite, vue, testing, browser