Ruby on rails 文件和目录结构的RSpec命名约定

Ruby on rails 文件和目录结构的RSpec命名约定,ruby-on-rails,rspec,Ruby On Rails,Rspec,我正在写RSpec测试,我已经到了一个地步,我在不同的网站上读到了不同的观点。当我们处理spec/controllers和spec/models目录时,RSpec的目录结构是清楚的,但是我得到的冲突信息涉及测试视图 我想把这些测试放在spec/integration/目录下,但我读到它应该在spec/integration下,但另一本书说是spec/requests。这有关系吗 为了使情况进一步复杂化,我阅读了关于命名测试的实际文件名的冲突信息!例如,如果我有一个名为“people”(我使用ha

我正在写RSpec测试,我已经到了一个地步,我在不同的网站上读到了不同的观点。当我们处理spec/controllers和spec/models目录时,RSpec的目录结构是清楚的,但是我得到的冲突信息涉及测试视图

我想把这些测试放在spec/integration/目录下,但我读到它应该在spec/integration下,但另一本书说是spec/requests。这有关系吗

为了使情况进一步复杂化,我阅读了关于命名测试的实际文件名的冲突信息!例如,如果我有一个名为“people”(我使用haml)的controller/model/view目录,我应该这样命名文件:

spec/integration/people.html.haml_spec.rb

然而,另一本书提出了以下建议:

规格/要求/人员\u规格rb

我想了解一下RSpec中的命名约定,以及为什么我应该将视图测试命名为特定的名称,以及将它们放在spec/integration或spec/request下是否重要。我觉得我在这里随风而行


非常感谢您的帮助。

请查看这些书的出版日期以及它们的RSpec版本。命名结构随着时间的推移略有变化

根据的文档,请求规范可以包含在spec/requests、spec/api或spec/integration中。我更喜欢将请求规范放入规范/请求中

为了让事情变得更有趣,如果您与rspec rails一起使用,它将与Capybara 1.x的spec/requests和Capybara 2的spec/features一起使用

对于单个等级库文件名,当有特定类(如Rails模型)正在测试时,应使用类似的等级库文件名:

app/models/user.rb
->
spec/models/user\u spec.rb

视图等级库应使用模板名称:

app/views/users/index.html.erb
->
spec/views/users/index.html.erb\u spec.rb

命名空间模型应在规范文件路径中包含命名空间:

app/models/admin/user.rb
->
spec/models/admin/user\u spec.rb

RSpec脚手架生成器是显示这些规范所属位置的良好指南


当没有特定的类被测试时,就像请求规范一样,IMHO您应该可以随意使用一个名称来描述被测试的东西。例如,
spec/requests/place\u an\u order\u spec.rb

rspec gem读取的文件只是那些以
\u spec.rb
结尾的文件,只要层次结构的顶部是字母数字单词,它们就位于
spec
文件夹下面的层次结构中的任何位置(也就是说,在生成规范时不会考虑名为
spec/##/
的文件夹下的文件。)这是在
/gems/rspec-rails-2.14.1/lib/rspec/rails/tasks/rspec.rake中实现此功能的相关代码行:

namespace :spec do
  types = begin
    dirs = Dir['./spec/**/*_spec.rb'].
           map { |f| g=f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') ; puts ">>> Found #{g}."; g }.
           uniq.
           select { |f| File.directory?(f) }
    Hash[dirs.map { |d| [d.split('/').last, d] }]
  end
因此,
\u spec.rb
之前的文件名中的所有文本都是约定的-它不会改变Rails处理文件的方式


我必须阅读更多的代码,才能弄清楚
spec
下每个文件夹名称的意义是什么——它被传递到创建的Rake spec任务,因此它被用于一些事情,但我不知道是什么。

不应该将view spec格式化为
spec/views/user.html.erb\u spec.rb而不是de>spec/views/user.html.erb
?另外,
spec/views/user.html.erb
似乎是个奇怪的例子,
spec/views/users/index.html.erb
不是更有意义吗?伙计们!如果我想为单个模型创建两个spec文件呢?例如:第一个用于作用域,第二个用于某些逻辑…有什么建议吗?
user\u scopes\u spec.rb
>和
user\u my\u feature\u name\u spec.rb
?感谢您提到文件选择。根据目录,会加载不同的帮助程序。