用途:为 Ruby 与 Rails 应用编写 Minitest 测试,适用于创建测试文件、编写测试用例或测试新功能;明确不用于 RSpec。
主要能力与组织:支持传统风格(test "description")与 Spec 风格(describe/it 配合 let/subject),同一文件可混用以提升清晰度。测试目录按用途划分:test/models、test/services、test/integration、test/mailers、test/jobs、test/fixtures,配置位于 test/test_helper.rb。命名镜像应用结构,如 app/models/user.rb 对应 test/models/user_test.rb,并使用完全限定命名空间。
核心原则:AAA(Arrange-Act-Assert);测试行为而非实现;测试相互独立;名称清晰;覆盖正常路径与边界情况;减少数据库操作;使用 fixtures 提供测试数据。
常用写法:Spec 模式用 subject 表示被测方法、let 惰性求值、describe 分组上下文(最多 3 层嵌套)、before 做复杂准备。fixtures 在 test/fixtures 下用 yml 定义,测试中用 fixtures :users 与 users(:alice) 引用。Mock 与 Stub 可用 Object.stub :method, value 或 Minitest::Mock.new 验证调用。提供基础断言、集合断言、异常断言以及 Rails 断言(assert_changes、assert_difference、assert_response、assert_redirected_to)。
覆盖范围:模型测验证、关联、scope、回调和实例方法;服务对象测正常、异常、边界与外部集成;控制器测状态码、重定向与参数处理;后台任务测执行、重试与错误处理。
限制与注意:不要添加 require 'test_helper'(自动导入);避免超过 3 层嵌套;避免用实例变量代替 let 造成状态泄漏;避免缺少 subject 导致重复;集合包含用 assert_includes 而非 assert x.include?(y);不测试私有方法;优先 fixtures 而非 factories 以保持测试快速。文档还提及 references 下的 spec-patterns、advanced-patterns、anti-patterns 参考文件,含 37signals 生产模式(多租户 fixtures、确定性 UUID、VCR 时间戳过滤、并发检测、适配器兼容),但其具体内容暂未提供。