Test Service 是一个用于编写 RSpec 服务对象测试的技能,归属于 midudev/autoskills,来源路径为 skills.sh/midudev/autoskills/test-service。
用途:当需要为 spec/services/ 下的服务对象编写 RSpec 测试时使用,目标是对公开的 .call 接口约定进行测试,而非测试实现细节。触发词包括 service spec、test service object 等。
主要能力:
- 提供测试文件的存放规范:spec/services/module_name/service_spec.rb。
- 统一 subject 写法:subject(:service_call) { described_class.call(params) }。
- 指导单元隔离使用 instance_double 模拟协作者,集成测试使用 create 访问数据库。
- 提供多断言时使用 aggregate_failures、状态验证使用 change matchers、时间相关场景使用 travel_to 等约定。
- 提供 FactoryBot 的 Hash 工厂(class: Hash 配合 initialize_with)来构造 API 响应类测试数据。
- 给出新测试文件检查清单:定义 subject、必要的协作者模拟、正常路径、错误与边界场景、部分成功场景、shared_examples、多断言聚合、状态变更匹配等。
- 列出常见错误及正确做法,例如缺少错误场景测试、滥用 let!、工厂数据过大、测试内部实现而非接口约定等。
- 提供渐进式披露的延伸资料:PATTERNS.md、assets/spec_examples.md、assets/testing_checklist.md,仅在需要时加载。
使用方式(HARD-GATE 流程,不得在第一步写出并按正确原因失败的测试之前实现服务):
- WRITE:编写 spec,覆盖正常路径、错误场景与边界场景。
- RUN:执行 bundle exec rspec spec/services/your_service_spec.rb。
- VERIFY:确认失败原因是预期行为缺失,而非拼写错误或缺少工厂。
- FIX:实现或修复直到测试通过。
- SUITE:执行 bundle exec rspec spec/services/,确认没有回归。 完成服务测试后,输出需包含固定结构:Spec File(路径与 subject)、Coverage(正常路径、错误场景、边界场景、隔离情况)、TDD Gate(RED、GREEN、Suite 状态)。
适用场景:Ruby/RSpec 项目中为服务对象编写测试、实践 TDD 纪律、构造 API 客户端响应测试数据、进行服务层的单元与集成测试。
限制与关联:该技能面向 RSpec 与 Ruby 生态;文中未提供安装命令、价格、平台支持或效果保证等信息,相关内容暂未提供。可与其他技能配合:write-tests(通用 RSpec 风格与 TDD 纪律)、create-service-object(被测试的服务约定)、integrate-api-client(API 客户端层测试模式)、test-engine(引擎相关服务的测试)。