用途:用于编写测试与审查测试质量,模式取自 Campfire 和 Fizzy 测试套件。
主要约定:默认使用 Minitest + fixtures,不用 RSpec、不用 FactoryBot;测试行为而非实现细节;保持测试确定、快速,并并行化(workers: :number_of_processors)。测试与功能在同一提交/PR 中交付,安全修复必须附带回归测试;不为了可测试性增加生产复杂度。
覆盖预算:重点在模型测试(领域不变量、concerns)与控制器/集成测试(完整请求周期、鉴权、格式);少量系统测试覆盖关键快乐路径;仅为含真实逻辑的 job 写测试;不写视图测试、JS/Stimulus 单元测试和穷尽式 channel 测试;同一行为不在多层重复断言。
Fixtures:关系用标签而非 ID 表达,用 ERB 生成相对时间戳与共享计算值;test/models 目录镜像 app/models 结构,共享 concern 放 test/models/concerns/。UUID 主键会打乱顺序,需在 fixtures 中生成由标签派生的确定性 UUIDv7。富文本 fixtures 用生产代码构建。
实践:用户流程用系统/集成测试,领域不变量用模型测试;时间逻辑用 travel_to;仅在边界 mock/stub;外部 HTTP 用 VCR。用 perform_enqueued_jobs 和 assert_enqueued_with 测试异步副作用;用 assert_difference 断言关联计数变化;控制器两种格式都要测(turbo_stream 与 json);Turbo 广播按层断言;鉴权测试要覆盖越权返回 403/404;多租户套件在 setup 设置 Current.account 并在 teardown 清理;中间件用 Rack::MockRequest 隔离测试;系统测试用 using_session 处理多用户,实时断言前等待 cable 连接;非事务副作用套件按需关闭事务测试并显式清理;并行套件重置共享全局状态。
需避免:仅为可测试性增加生产复杂度、过度 mock 内部代码、同一行为多层重复测试、每测试冗余 setup 拖慢套件、为单行 job 或平凡委托写单元测试、手写 HTML 字符串、无 travel_to 的时间相关断言。
限制:资料未提供安装命令、具体版本要求或收费信息。