跳转至

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