用途:在编写、评审或清理 RSpec 测试时使用,核心原则是优先行为信心而非实现耦合,让测试可读、确定且维护成本低。
主要能力:给出 spec 类型选择规则(Model 测领域逻辑、Request 测 HTTP 端点并优先于 controller、Job 测后台处理、Service/PORO 不用 Rails 辅助方法、System 仅用于关键 E2E);提供工厂设计(最小化工厂、用 traits 表示可选状态、优先 build/build_stubbed 而非 create)、mock 边界(只 stub 外部边界,不 mock 内部代码与 ActiveRecord finder)、隔离与命名、let 与 let! 取舍、aggregate_failures、共享示例、TDD 流程(先写失败 spec、确认失败信息、最小实现、重构、验证)。还包含不稳定测试的成因与修复表(时间依赖用 freeze_time/travel_to、状态泄漏、异步任务、外部 HTTP 用 WebMock/VCR、数据库状态、竞态、断言精度),以及服务对象 spec 的锚点模式:describe '.call' 与 subject(:result)。
使用方式:按输出风格落地,spec 路径与源文件镜像(app/foo/bar.rb → spec/foo/bar_spec.rb),文件首行 # frozen_string_literal: true,使用完整常量路径的 RSpec.describe、describe '#method'/'.class_method'、context 'when ...',示例名用一般现在时且绝不含 and(需拆分)。
限制:未提及具体安装命令、收费、平台支持或效果数据;let_it_be 仅在项目已依赖 test-prof 时使用。