用途
accelint-ts-testing 是一项面向 TypeScript 项目的 Vitest 测试指导技能,目标是帮助编写可维护、有效的 Vitest 测试,侧重测试组织、清晰度与性能方面的专家级指导。当需要(1)使用 AAA 模式、参数化测试或 async/await 编写新测试,或(2)进行其他相关测试工作时使用。
主要能力与规则
技能以“NEVER”清单形式给出必须避免的反模式,覆盖以下方面:
- 不为没有行为的文件编写测试:常量文件、类型定义文件、GLSL uniform 声明和纯数据文件不含可测逻辑,跳过测试。
- 不跳过全局 mock 清理配置:应在 vitest.config.ts 中一次性配置 clearMocks: true、mockReset: true、restoreMocks: true,以消除顺序依赖失败。
- describe 块嵌套不超过 2 层;把上下文放进测试名称。
- 测试描述必须读作以 “it” 开头的句子,使用小写,如 it('should add item to cart');基于示例的测试用 it('should...'),基于属性的测试用 it('property: ...') 格式。
- 不测试库已自测的内部实现(如 Array.prototype.map 的行为)。
- 不为了测试而导出内部函数;应通过公共 API 验证行为。
- 不 mock 自己的纯函数;只 mock 外部依赖,优先顺序为 fakes > stubs > spies > mocks。
- 不使用 toBeTruthy() 或 toBeDefined() 等宽松断言;toBeTypeOf() 不属于宽松断言。
- 不测试实现细节(如“函数 X 被调用 3 次”),而应测试用户可观察的输出。
- 不在测试间共享可变状态。
- 不在测试文件中使用 any 或跳过类型检查;测试应作为可执行文档。
- 不在未运行 TypeScript 类型检查的情况下标记测试文件完成:测试文件通常被排除在 tsconfig.json 编译路径外,需用项目包管理器直接对测试文件运行 tsc --noEmit,monorepo 需先进入具体包目录,修复所有类型错误,不得用 as any 或 @ts-ignore 绕过。
- 不假设 TypeScript 类型能防止运行时错误:类型仅存在于编译期,需测试 null、undefined、畸形对象等防御性场景。
- 当存在更强属性时不写弱属性:编码/解码对验证往返相等,归一化验证幂等性,而非仅验证不抛异常或返回某值。
写测试前的思考模式
- 该文件是否应被测试:不含函数、逻辑或转换的文件无需测试。
- 测试隔离与设置:按层思考,配置消除整类错误,setup 文件处理项目级关注点,beforeEach 处理测试特定状态。测试不应依赖前序测试或共享状态。
- 测什么:测行为而非实现;选择最简依赖,真实实现 > fake > stub > spy > mock。
- 测试清晰度:5 秒内可理解,遵循 AAA 并划分清晰边界;同一行为的多种变体用 it.each() 参数化测试。
- 性能与维护:避免测试框架内部或琐碎操作,聚焦业务逻辑、边界情况与错误处理;测试应亚毫秒级完成。
覆盖内容
测试组织(文件位置、命名、describe 块结构)、AAA 模式、参数化测试(it.each())、错误处理(异常、边界情况、故障注入)、断言(严格断言)、测试替身(fakes、stubs、mocks、spies 层级与使用时机)、异步测试(Promise、async/await、定时器、并发测试)、性能、Vitest 特性(覆盖率、watch 模式、setup 文件、配置发现)、快照测试、基于属性的测试(使用 fast-check 生成输入)。
使用方式
采用渐进式披露结构以减少上下文占用:
- 从总览(AGENTS.md)开始,阅读规则概要与发现既有测试配置的工作流。
- 检查既有测试配置:先查看 vitest.config.ts 的全局 mock 清理设置,再搜索 setup 文件(test/setup.ts、vitest.setup.ts 等)并分析其配置。
- 按需加载特定规则文件:强制加载项包括 async-testing.md(异步测试)、test-doubles.md(mock/stub/spy/fake)、property-based-testing.md(审查既有测试文件时);按模式加载项包括 organization.md、aaa-pattern.md、parameterized-tests.md、error-handling.md、assertions.md、performance.md、vitest-features.md、snapshot-testing.md。除非特别需要,不要加载 performance.md(测试快时)、snapshot-testing.md(未提及快照时)、vitest-features.md(基础测试编写时)。
- 应用模式:每个参考文件包含错误示例、正确示例及原因说明。
- 使用报告模板:当技能被直接调用(/accelint-ts-testing <path>)或用户要求审查/审计测试代码时,使用 assets/output-report-template.md,包含执行摘要、严重级别(Critical、High、Medium、Low)、影响分析、分类(测试组织、断言、测试替身、异步测试、性能)、模式引用与总结表。撰写单个函数测试或回答具体问题时不用该模板。审计时务必检查基于属性的测试机会,每次审计加载 property-based-testing.md,检查高价值 PBT 模式(编码/解码对、归一化器、验证器、纯函数、排序函数),即使无其他问题也应在报告中包含 PBT 机会。
适用场景
适用于 TypeScript 项目中使用 Vitest 编写新测试、审查或审计测试代码、改进测试组织与清晰度、排查测试顺序依赖或性能问题等场景。
限制
该资料未提供具体收费、价格或平台支持信息,暂未提供。