SuperAPI AI 工具集

writing-tests

测试与质量

查看项目

更新于 10-16 02:23

技能介绍

Writing Tests 是一个面向现有代码编写测试的技能,适用于用户要求为已有代码添加测试、提升测试覆盖率,或为某个指定文件、模块编写测试的场景。

主要能力与用途:分析现有代码并为其编写较全面的单元测试与集成测试;检测项目使用的测试框架;识别尚未被测试覆盖的代码路径并生成测试;在项目未配置测试运行器时进行初始化设置;模拟外部依赖;运行测试并验证是否通过。

使用方式按以下步骤展开:

  1. 检测测试环境。检查项目已配置的内容,例如查看 package.json 中的测试运行器:cat package.json | grep -E "jest|vitest|mocha|playwright|cypress",并查找 vitest.config.ts、jest.config.ts、playwright.config.ts、.mocharc.* 等配置文件,同时查看已有测试文件以了解项目的测试模式与约定。

  2. 若不存在测试运行器,则进行初始化。以安装 Vitest 为例:npm install -D vitest @testing-library/react @testing-library/jest-dom;随后在 package.json 中添加测试脚本:{ "test": "vitest run", "test:watch": "vitest" }。

  3. 分析目标代码。阅读待测文件并识别:公共 API(导出的函数、类、组件、hooks)、代码路径(条件分支、错误处理、边界情况)、依赖(需要模拟的外部服务、数据库、API)、副作用(文件 I/O、网络调用、DOM 变更)。

  4. 创建测试文件。将测试文件放在源文件旁边或 tests/ 目录中,并匹配项目约定,例如 src/utils/format.ts 对应 src/utils/format.test.ts,src/components/Button.tsx 对应 src/components/Button.test.tsx。测试结构示例使用 describe/it/expect/vi,分别覆盖正常路径、边界情况(空字符串、null/undefined 输入)、错误情况(无效参数抛错)以及边界条件(最大长度输入)。

  5. 模拟外部依赖。单元测试中不要发起真实 API 调用或数据库查询,例如使用 vi.mock("@/lib/db", ...) 模拟数据库查询;对 React 组件,可模拟获取数据的 hooks,例如 vi.mock("@/hooks/useUser", ...)。使用 Testing Library 测试 React 组件时,可引入 render、screen、fireEvent 并断言点击回调被调用一次。

  6. 运行测试并验证通过:npm test。若失败,则根据是测试预期错误还是实现错误,修复测试或修复代码。

测试范围建议:始终测试公共 API、错误处理、边界情况(空、null、零、负数)、状态转换和异步行为;跳过测试私有实现细节、第三方库内部实现、简单的 getter/setter 以及仅类型代码。

注意事项:匹配项目现有测试风格,例如项目使用 test() 而非 it() 时应保持一致;不要测试实现细节,应测试行为与输出而非内部方法调用;使用能说明场景的描述性测试名称,例如 "returns 0 when cart is empty" 而非 "test1";每个测试聚焦一个断言概念,若验证同一行为则多个 expect 调用也可接受;对异步代码始终 await 结果或使用 resolves/rejects 匹配器。