Rails 组织单元测试的方式是什么?

Eli*_*jah 3 ruby unit-testing ruby-on-rails testunit

在 Rails 项目中创建单元测试时,我问自己的第一个问题是“组织单元测试的约定是什么”,因为几乎所有其他内容都是由约定决定的。另外,我很好奇 MiniTest、TestUnit 和 Rspec 之间的约定是否发生变化。

到目前为止,我所做的是将 Rails 目录结构镜像到 test/unit 目录中,如下所示:

[Rails Root]
 /lib/
  ./postgres.rb
  ./awesome_parser.rb
 /app/helpers
  ./psychic_helper.rb

 /test/unit/
  ./lib/postgres.rb
  ./lib/awesome_parser.rb
  ./app/helpers/psychic_helper
Run Code Online (Sandbox Code Playgroud)

组织测试的最传统方式是什么,这样当其他人加入这个项目时他们就不会咒骂我的名字?

Mor*_*ori 5

Rspec 与上面类似,只是省略了“app”目录,例如(来自 Rails 根目录):

spec/controllers/user_controller_spec.rb
spec/models/user_spec.rb
spec/helpers/user_helpers_spec.rb
Run Code Online (Sandbox Code Playgroud)

但lib目录等还是用的:

spec/lib/user_stuff_spec.rb
Run Code Online (Sandbox Code Playgroud)

集成测试跨越边界,因此获得自己的目录:

spec/integration/route_specs.rb
Run Code Online (Sandbox Code Playgroud)

Spec 助手有自己的目录:

spec/support/custom_matchers.rb
Run Code Online (Sandbox Code Playgroud)

可能不是惯例,但我们将工厂放在自己的目录中:

spec/factories/user_factories.rb
Run Code Online (Sandbox Code Playgroud)