SuperAPI AI 工具集

rspec-best-practices

设计与创作

查看项目

更新于 10-16 06:17

技能介绍

用途:在编写、审查或清理 RSpec 测试时使用,核心原则是优先保证行为置信度而非耦合实现,让测试可读、确定且易维护。

主要能力与规则: 按层选择 spec 类型:模型测领域逻辑,请求规格测 HTTP 端点(优先于控制器规格),Job 测后台处理,Service/PORO 不使用 Rails 辅助方法,系统规格仅用于关键端到端(较慢)。断言行为而非实现;工厂保持最小化,仅设置必要属性,用 traits 表达可选状态,能 build/build_stubbed 就不用 create;只在外部边界做 mock,不 mock 内部代码;每个示例相互独立,无共享可变状态;用 describe 描述类/方法,用 context 描述场景。

TDD 流程:先写最小且失败的正确 spec,运行并确认失败原因来自缺失代码而非设置问题,实现最小代码使其通过,重构去重与命名,最后运行相关 spec 文件与整个套件再提交。

用法要点:Service 规格必须写 describe '.call' 并使用 subject(:result);默认用 let,仅当对象必须在示例前存在时用 let!;外部服务在类方法级别 mock,如 allow(ServiceClass).to receive(:method),instance_double 只用于注入的协作者;时间相关断言用 travel_to / freeze_time;示例名用现在时,禁止出现 “and”,每个示例只验证一个行为,返回前须扫描所有示例名。文件路径与源码对应,如 app/foo/bar.rb → spec/foo/bar_spec.rb,首行加 # frozen_string_literal: true,RSpec.describe 使用完整常量路径。避免项目未依赖 test-prof 时使用 let_it_be。

限制:资料未提供具体安装命令、版本要求与平台信息;共享示例仅在同一行为契约适用于多个被测对象且无需逐示例覆盖 let 时使用。