Ruby 测试¶
本文件使用 Ruby 和 Rails 特定内容扩展 common/testing.md。
测试框架¶
- 如果 Rails 应用遵循默认的 Rails 测试栈,则使用 Minitest。
- 如果项目中已经确立,或者团队对此有明确的生产约定,则使用 RSpec。
- 不要在没有迁移理由的情况下,在同一功能领域内混用 Minitest 和 RSpec。
测试金字塔¶
- 将高速领域逻辑放在模型、服务、查询、策略和作业测试中。
- 使用请求/控制器测试覆盖 HTTP 契约、认证行为、重定向、状态码和响应形状。
- 仅对依赖浏览器的重要流程使用基于 Capybara 的系统测试。保持聚焦并稳定。
- 使用行为单元测试和队列/入队契约集成测试覆盖后台作业。
固件与工厂¶
- 如果 Rails 固件是项目默认,并且数据图较小,则使用它们。
- 如果场景需要显式对象构建或复杂 trait,则使用
factory_bot。 - 将测试数据放在被断言的行为附近。避免使用隐藏设置成本的全局固件。
命令¶
优先使用项目本地命令:
bin/rails test
bin/rails test test/models/user_test.rb
bundle exec rspec
bundle exec rspec spec/models/user_spec.rb
覆盖率¶
- 如果强制要求覆盖率,则使用 SimpleCov。在 CI 中设置阈值,不要用低价值测试刷高分支覆盖率。
- 修复 bug 时,在修改生产代码之前添加回归测试。
参考¶
关于整个仓库的 RED -> GREEN -> REFACTOR 循环,请参见技能:tdd-workflow。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC