关于 vitest
vitest 是面向 Vitest 使用者的测试最佳实践指南,适用于编写、排查和审查测试。指南按优先级整理规则,涵盖异步模式、隔离、模拟及性能优化。
主要功能
- 01按优先级整理 44 条规则
- 02涵盖异步测试与测试隔离
- 03指导模拟策略和状态清理
- 04提供性能与 CI 优化建议
- 05涵盖快照、环境、断言和组织
适用场景
- 01编写和审查 Vitest 测试
- 02排查不稳定或缓慢的测试
- 03设置测试配置与模拟
- 04优化 CI 中的测试执行
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill vitest安装后在 Claude Code 中输入/vitest确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdCHANGELOG.mdmetadata.jsonREADME.mdassets/templates/_template.mdreferences/_sections.mdassert-edge-cases.mdassert-expect-assertions.mdassert-one-assertion-concept.mdassert-specific-matchers.mdassert-toequal-vs-tobe.mdasync-act-wrapper.mdasync-await-assertions.mdasync-concurrent-expect.mdasync-error-handling.mdasync-fake-timers.mdasync-return-promises.mdasync-waitfor-polling.mdenv-browser-api-mocking.mdenv-globals-config.mdenv-per-file-override.mdenv-setup-files.mdmock-avoid-overmocking.mdmock-clear-between-tests.mdmock-implementation-not-value.mdmock-msw-network.mdmock-spyon-vs-mock.mdmock-type-safety.mdmock-vi-mock-hoisting.mdorg-describe-nesting.md详细介绍
Vitest 最佳实践
Vitest 测试框架的全面性能优化与最佳实践指南。包含 8 个类别中的 44 条规则,按影响程度排序,指导测试编写、重构和代码审查。
适用场景
以下情况请参考这些指南:
- 编写新的 Vitest 测试
- 调试不稳定或运行缓慢的测试
- 设置测试配置
- 在 PR 中审查测试代码
- 从 Jest 迁移到 Vitest
- 优化 CI/CD 测试性能
按优先级划分的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 异步模式 | CRITICAL | async- |
| 2 | 测试设置与隔离 | CRITICAL | setup- |
| 3 | 模拟模式 | HIGH | mock- |
| 4 | 性能 | HIGH | perf- |
| 5 | 快照测试 | MEDIUM | snap- |
| 6 | 环境 | MEDIUM | env- |
| 7 | 断言 | LOW-MEDIUM | assert- |
| 8 | 测试组织 | LOW | org- |
快速参考
1. 异步模式(CRITICAL)
async-await-assertions- 等待异步断言完成,避免误报async-return-promises- 从测试函数返回 Promiseasync-fake-timers- 对依赖时间的代码使用模拟计时器async-waitfor-polling- 使用 vi.waitFor 检查异步条件async-concurrent-expect- 在并发测试中使用测试上下文的 expectasync-act-wrapper- 等待用户事件完成,避免 act 警告async-error-handling- 正确测试异步错误处理
2. 测试设置与隔离(CRITICAL)
setup-beforeeach-cleanup- 在 afterEach 钩子中清理状态setup-restore-mocks- 在每个测试后还原模拟setup-avoid-shared-state- 避免测试间共享可变状态setup-beforeall-expensive- 使用 beforeAll 执行开销较大的一次性设置setup-reset-modules- 测试模块状态时重置模块setup-test-factories- 使用测试工厂创建复杂测试数据
3. 模拟模式(HIGH)
mock-vi-mock-hoisting- 理解 vi.mock 的提升行为mock-spyon-vs-mock- 根据情况选择 vi.spyOn 或 vi.mockmock-implementation-not-value- 对动态模拟使用 mockImplementationmock-msw-network- 使用 MSW 模拟网络请求mock-avoid-overmocking- 避免过度模拟mock-type-safety- 确保模拟具有类型安全性mock-clear-between-tests- 清除测试间的模拟状态
4. 性能(HIGH)
perf-pool-selection- 选择合适的进程池以提升性能perf-disable-isolation- 在安全的情况下禁用测试隔离perf-happy-dom- 在可行时优先使用 happy-dom 而非 jsdomperf-sharding- 使用分片实现 CI 并行化perf-run-mode-ci- 在 CI 环境中使用 run 模式perf-bail-fast-fail- 使用 bail 在 CI 中快速失败
5. 快照测试(MEDIUM)
snap-inline-over-file- 小型值优先使用内联快照snap-avoid-large- 避免大型快照snap-stable-serialization- 确保快照序列化稳定snap-review-updates- 提交前审查快照更新snap-describe-intent- 为快照测试使用描述性名称
6. 环境(MEDIUM)
env-per-file-override- 必要时按文件覆盖环境env-setup-files- 使用设置文件进行全局配置env-globals-config- 统一配置全局变量env-browser-api-mocking- 模拟测试环境中不可用的浏览器 API
7. 断言(LOW-MEDIUM)
assert-specific-matchers- 优先使用专用匹配器,而非通用匹配器assert-edge-cases- 测试边界情况和边界值assert-one-assertion-concept- 每个测试只测试一个概念assert-expect-assertions- 在异步测试中使用 expect.assertionsassert-toequal-vs-tobe- 正确选择 toBe 或 toEqual
8. 测试组织(低)
org-file-colocation- 将测试文件与源文件放在一起org-describe-nesting- 使用 describe 块进行逻辑分组org-test-naming- 编写描述性测试名称org-test-skip-only- 适当使用 skip 和 only
使用方法
阅读各个参考文件,了解详细说明和代码示例:
- 章节定义 - 类别结构和影响级别
- 规则模板 - 添加新规则的模板
- async-await-assertions - 规则文件示例
- mock-vi-mock-hoisting - 规则文件示例
相关技能
- 有关 TDD 方法,请参阅
test-tdd技能 - 有关使用 MSW 进行 API 模拟,请参阅
test-msw技能 - 有关 TypeScript 测试模式,请参阅
typescript技能
完整编译文档
查看包含所有展开规则的完整指南:AGENTS.md
评论
支持 Markdown