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

13
我正在编写RSpec测试,但在不同网站上阅读到的意见不同。当处理spec/controllers和spec/models目录时,RSpec的目录结构很清晰,但我收到的关于测试视图的信息存在冲突。
我想把这些测试放在spec/integration/目录中,但我看到有人说它应该在spec/integration下,另一本书则说是spec/requests。这是否重要?
为了进一步复杂化情况,我读到的关于测试文件实际命名的信息也存在冲突!例如,如果我有一个被称为 "people" 的控制器/模型/视图目录(我使用haml),我应该像这样命名文件:
spec/integration/people.html.haml_spec.rb
然而,另一本书建议使用:
spec/requests/people_spec.rb
请解释一下RSpec的命名规范,并说明为什么我应该给视图测试命名特定名称,以及将其放置在spec/integration或spec/requests下是否重要。感觉自己像在摸石头过河。任何帮助都将不胜感激。
2个回答

12

检查书籍日期和编写它们的RSpec版本。命名结构随时间略有变化。

根据rspec-rails文档,请求规范可以放在spec/requests、spec/api或spec/integration中。我更喜欢将请求规范放在spec/requests中。

如果你正在使用Capybara与RSpec Rails一起工作,则对于Capybara 1.x,它将与spec/requests一起工作,而对于Capybara 2,它将与spec/features一起工作。

关于单独的规范文件名称,当有具体的测试类时,比如Rails模型,应该使用类似的规范文件名称:

app/models/user.rb -> spec/models/user_spec.rb

视图规范应该使用模板名称:

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

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

app/models/admin/user.rb -> spec/models/admin/user_spec.rb

RSpec脚手架生成器是一个很好的指南,可以展示这些规范属于哪里。

当没有具体的测试类时,比如请求规范的情况下,我个人认为你应该随意使用描述被测试对象的名称。例如:spec/requests/place_an_order_spec.rb


视图规范不应该格式化为 spec/views/user.html.erb,而应该是 spec/views/user.html.erb_spec.rb 吗?此外,spec/views/user.html.erb 似乎是一个奇怪的例子,spec/views/users/index.html.erb 不是更合理吗? - Rob d'Apice
大家好!如果我想为单个模型拥有两个规范文件怎么办?例如:第一个是用于作用域,第二个是用于某些逻辑... 有什么建议吗?user_scopes_spec.rbuser_my_feature_name_spec.rb - Евгений Масленков

2
RSpec gem读取的文件只需要以_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

因此,文件名中在_spec.rb之前的所有文本都是约定俗成的 - 它不会改变Rails处理文件的方式。

我需要仔细阅读代码才能弄清每个文件夹名称在spec下代表着什么意义 - 它被传递到创建的Rake spec任务中使用,因此它正在用于某些目的,但我不知道具体是什么。


谢谢提到文件选择。根据目录不同,加载不同的辅助工具。https://www.relishapp.com/rspec/rspec-rails/docs/directory-structure - maikel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接