SuperAPI AI 工具集

vitest

测试与质量

查看项目

更新于 10-16 10:11

技能介绍

Vitest 是一个快速、Vite 原生的测试框架,提供与 Jest 兼容的 API。它适用于测试 Astro 组件、JavaScript 模块,或任何需要快速、现代测试能力的 Vite 项目。

主要特点 该技能的资料中列出了以下特性与优势:

  • Vite 驱动:即时 HMR,与应用使用相同配置。
  • Jest 兼容:API 熟悉,便于迁移。
  • ESM 优先:原生支持 ES 模块。
  • TypeScript:开箱即用支持。
  • Watch 模式:文件变更时智能重跑。

安装与项目设置 基础安装命令: npm install -D vitest 带 UI 与覆盖率: npm install -D vitest @vitest/ui @vitest/coverage-v8

package.json 脚本示例: { "scripts": { "test": "vitest", "test:run": "vitest run", "test:ui": "vitest --ui", "test:coverage": "vitest run --coverage" } }

配置 vitest.config.js 示例包含测试文件匹配(include/exclude)、执行环境(node、jsdom、happy-dom)、全局设置(globals)、覆盖率(provider 为 v8,reporter 为 text/json/html)、超时设置(testTimeout、hookTimeout)等。也可通过 mergeConfig 与 Vite 共享配置,例如合并 vite.config.js 并将 environment 设为 jsdom。

编写测试

  • 基础结构:使用 describe、it、expect,以及 beforeEach、afterEach 等。示例覆盖日期格式化与数组求和,包含正常值与异常断言。
  • 前置与后置钩子:支持 beforeAll、afterAll、beforeEach、afterEach,典型用于数据库连接的建立、清理与关闭。

断言 资料列出了多类断言:相等(toBe、toEqual、toStrictEqual)、真值(toBeTruthy、toBeFalsy、toBeNull、toBeUndefined、toBeDefined)、数值(toBeGreaterThan、toBeGreaterThanOrEqual、toBeLessThan、toBeCloseTo)、字符串(toMatch、toContain)、数组(toContain、toHaveLength、arrayContaining)、对象(toHaveProperty、toMatchObject)、异常(toThrow 等)、异步(resolves、rejects)。

Mock 能力

  • 函数 Mock:vi.fn(),可断言调用次数与参数,可设置返回值(mockReturnValue、mockReturnValueOnce)或实现。
  • 模块 Mock:vi.mock('./api.js', ...),在 mock 后进行导入,可断言调用参数。
  • Spies:vi.spyOn(obj, 'method'),可断言调用与返回值,并可 mockRestore。
  • 定时器:vi.useFakeTimers / vi.useRealTimers,配合 advanceTimersByTime、runAllTimers 控制 setTimeout 等。

DOM 测试 将 environment 设为 happy-dom 或 jsdom 后可进行 DOM 测试,示例中通过设置 document.body.innerHTML 渲染按钮元素,断言其存在、文本内容与点击事件处理。

异步测试 支持返回 Promise、async/await,以及 resolves/rejects 断言,用于验证异步函数的解析与拒绝结果。

快照测试 支持 toMatchSnapshot 与 toMatchInlineSnapshot,并通过 vitest -u 更新快照。

测试筛选与覆盖率

  • 筛选:可指定文件运行,使用 --grep 按模式匹配,使用 --changed 仅运行受影响的测试,使用 --watch 进入监听模式。
  • 覆盖率:配置 provider、reporter、include/exclude 及阈值(lines、functions、branches、statements),通过 vitest run --coverage 运行。

与 Astro 集成 可使用 astro/config 的 getViteConfig 包装测试配置,例如在 include 中匹配 **/*.test.js。

提交前检查清单 资料给出提交前的检查项:所有测试通过(npm test)、覆盖率满足阈值、新代码有对应测试、测试后恢复 Mock、测试中不遗留 .only 或 .skip、异步测试正确 await。

相关技能 资料标注了相关技能:unit-testing(通用测试模式)、astro(测试 Astro 组件)、javascript-author(可测试的代码模式)、build-tooling(Vite 配置)。

限制 资料未提供关于收费、价格、平台限制、性能基准或效果保证的信息,相关内容暂未提供。