用途:在需要编写、审查或清理 Rails RSpec 测试时使用该技能,触发词包括 write spec、rspec、test-driven、write tests。
主要能力与规则:规格类型上,模型规格覆盖领域逻辑并优先从这里开始;请求规格覆盖 HTTP 端点;任务规格覆盖后台处理;服务或普通 Ruby 对象规格覆盖干净的 Ruby 代码;系统规格用于跨层 E2E 旅程且应少用。断言要求测试行为而非实现。工厂要求最小属性、用 traits 表达选项,优先 build/build_stubbed 而非 create。打桩要求在类级别对边界打桩(例如 allow(Client).to receive),不要 mock Active Record。服务规格要求包含 describe '.call' 和 subject(:result)。默认用 let,仅当对象必须在动作前存在时才用 let!。示例名称用现在时,不用 should,不用 and。
硬性门槛:在失败测试存在前不得编写实现代码;运行 bundle exec rspec 并保留真实的失败类与消息。
核心流程:编写最小的失败规格(按 model > service > request > system 选择最小规格类型);运行并确认失败消息,展示具体 RED 失败类与消息,不用占位模板或虚构示例;实现通过规格所需的最少代码;重构去除重复并改进命名同时保持套件为绿;验证先运行相关规格文件再运行整套,然后提交。
稳定断言:时间相关逻辑用 freeze_time/travel_to;每个示例自建状态,避免 before(:all);异步任务用 queue_adapter = :test 和 have_enqueued_job;外部 HTTP 用 WebMock/VCR,CI 中禁止真实网络;数据库状态用事务化 fixtures 或 DatabaseCleaner;竞态用显式 Capybara 等待,避免 sleep;断言用 change.from().to() 与精确值,而非 be_truthy/be_falsey。每个示例只验一个行为。
扩展资料按需加载:assets/complete_example.md、assets/examples.md、assets/spec_templates.md、assets/tdd_proof_checklist.md、assets/output_checklist.md。
适用场景:RSpec 驱动的 Rails 新行为开发、测试审查与清理、TDD 循环。限制:正文未提供价格、平台支持范围、版本要求等事实。