SuperAPI AI 工具集

write-tests

测试与质量

查看项目

更新于 10-15 10:25

技能介绍

write-tests 是一个用于生成测试代码的技能,目标是为给定的文件、函数、类或模块产出全面的测试。它覆盖单元测试、集成测试、边界情况、错误路径以及模拟(mocking)。

用途 该技能用于在编写测试时遵循一套结构化流程。其核心理念是:好的测试验证行为、捕获回归,并作为活文档存在。它适合需要为现有代码补充测试、提升测试覆盖率或统一测试规范的开发场景。

主要能力 技能首先进行发现阶段,理解要测试什么。它会检测项目使用的测试框架与配置,例如通过查看 package.json 中的 jest、vitest、mocha、ava、playwright、cypress、testing-library 等关键字,读取 jest.config、vitest.config、pyproject.toml 中的 pytest 配置、pytest.ini、conftest.py、.rspec、spec_helper.rb、phpunit.xml 等文件。随后查找现有测试示例以匹配项目模式,例如搜索 .test.、.spec.、test_、_test. 等命名,并阅读一个现有测试文件来理解约定。

接着分析被测代码:读取目标文件以理解其导出与依赖,查找其导入内容(这些可能需要模拟),查找其提供的导出(这些是测试对象),并查找相关的类型、接口或类。

基于分析,技能识别测试用例,涵盖:正常路径(正常成功操作)、边界情况(边界值、空输入、极限)、错误情况(无效输入、失败、异常)、集成点(数据库、API、文件系统调用)、状态转换(前后状态变化)、并发(竞态条件、并行执行)以及安全(恶意输入、注入尝试)。

测试结构原则 技能强调 Arrange-Act-Assert(AAA)结构:安排测试数据与条件、执行被测代码、验证结果。测试命名应使用描述性名称解释场景,模式为 [单元] [场景] [预期结果],例如“createUser returns user with generated UUID when valid email provided”,避免“createUser works”“test 1”这类模糊命名。测试组织使用 describe 嵌套 describe 再嵌套 it 的结构。

好测试的标准包括:独立(不依赖其他测试状态)、确定(每次结果相同,无随机、无时序依赖)、快速(单元测试每个小于 100ms)、可读(测试即文档)、聚焦(每个测试一个断言概念,可有多个 expect 语句)、真实(测试数据接近真实数据,而非“test”和 123)。

技术栈示例 技能给出了多种技术栈的测试生成示例。在 TypeScript/JavaScript 的 Jest 示例中,展示了如何导入 describe、it、expect、jest、beforeEach、afterEach,如何模拟依赖(jest.mock),如何设置与清理(beforeEach、afterEach),如何构造测试数据工厂(createValidOrderInput、createMockOrder),以及如何编写正常路径、边界情况、错误处理的测试。示例中包括验证订单总额计算、支付授权先于保存、发送确认通知、处理单件商品、最大数量、免运费、空商品数组抛错、数量为零或负抛错、价格为负抛错、支付失败不保存订单、保存失败回滚支付、订单创建失败不发送通知、通知失败仍完成订单等。还展示了 cancelOrder 的测试:更新状态为已取消、取消已支付订单时退款、用户不拥有订单时抛 ForbiddenError、订单不存在时抛 NotFoundError、已发货或已取消时抛 ConflictError。

在 Vitest 示例中,展示了 calculateShipping 的测试:按重量计算国内标准运费、超过 100 美元免运费、快递费率更高、非美国地址国际费率更高、不支持国家抛 InvalidAddressError、零重量订单(数字产品)运费为零。

React 组件测试示例使用 Testing Library,但资料中该部分内容不完整。

使用方式 该技能以技能形式提供,具体安装与调用方式在资料中暂未提供。其工作方式是在编写测试时遵循上述结构化流程,先发现项目测试设置,再分析代码,最后生成覆盖多类场景的测试代码。

适用场景 适用于需要为现有代码补充测试、提升测试覆盖率、建立或统一测试规范的开发场景,尤其适合 TypeScript/JavaScript 项目中使用 Jest 或 Vitest 的情况,也涉及 React 组件测试。

限制 资料中未提供该技能的具体安装命令、调用方式、支持的完整技术栈列表、收费信息或平台限制。React 组件测试示例内容不完整。