用途:Vitest Testing 技能用于在 Vite 项目中搭建与配置 Vitest,编写 TS/JS 单元与集成测试、配置覆盖率阈值、使用 Mock、Spy、假定时器与快照,并支持从 Jest 迁移。它不适合 E2E 浏览器测试、Python 测试、测试质量分析或变异测试等场景。
主要能力:Vite 原生,复用 Vite 配置、转换与插件;基于 HMR 的监听模式反馈快;提供与 Jest 相似的 API,可近似直接替换;一流 TypeScript 与原生 ESM 支持,无需转译;支持 jsdom DOM 测试与基准测试。
安装:bun add --dev vitest;bun add --dev @vitest/coverage-v8;可选 bun add --dev happy-dom;用 bunx vitest --version 验证。配置在 vitest.config.ts 中通过 defineConfig 设置 test.globals、test.environment 等选项。
常用命令:bunx vitest(默认监听)、bunx vitest run(CI 单次运行)、bunx vitest --coverage、bunx vitest src/utils.test.ts、bunx vitest -t "should add numbers"、bunx vitest related src/utils.ts、bunx vitest -u、bunx vitest bench、bunx vitest --ui。
写法:从 vitest 引入 describe、it、expect,使用 toBe、toEqual、toStrictEqual、toMatch、toContain、toHaveLength、toHaveProperty、toMatchObject、toThrow 等断言;异步用 async/await 或 resolves/rejects;Mock 用 vi.fn、vi.mock、vi.spyOn、vi.useFakeTimers;快照用 toMatchSnapshot、toMatchInlineSnapshot。
限制与注意:jsdom 无布局引擎、CSS 解析有限,样式、宽高、位置相关断言可能失效或为空;getBoundingClientRect 恒为零;scrollIntoView 不存在,需打桩;避免条件式断言,先强制测试失败确认能捕获缺陷;跨包集成测试需将依赖固定到发布标签并加入 server.deps.inline,导出宿主真实入口。详细示例与进阶模式见 REFERENCE.md,官方文档见 https://vitest.dev 。