失败的示例后,guard-rspec重新运行包含shared_examples而不是实际spec文件的文件

时间:2013-12-11 20:58:59

标签: ruby-on-rails rspec ruby-on-rails-4 rspec-rails guard

我有一个功能规范spec/features/awesome_feature_spec.rb,需要spec/shared_examples/awesome_spec.rb。后者包含我在awesome_feature_spec.rb中使用的所有shared_examples。当一个示例失败并且我编辑一个文件来修复它并保存它时,guard会尝试再次运行该示例,但它直接运行awesome_feature.rb而不是awesome_feature_spec.rb,因为失败的共享示例位于{{ 1}}。这当然会导致错误,因为它需要运行awesome_feature.rb这是实际的功能规范。

这就是我的Guardfile的样子:

awesome_feature_spec.rb

任何人都可以帮助我制作防范运行功能规范而不是包含共享示例的文件吗?

非常感谢您提前:))

3 个答案:

答案 0 :(得分:5)

编辑:我没有正确地阅读这个问题。这不会解决上面的问题,但是如果有人在谷歌搜索关于guard-rspec的答案只是运行失败的规范时碰巧遇到这个问题,希望这会有所帮助。


这是guard-rspec的'焦点模式'功能。它会记住上次运行中的任何失败的规格,并一直运行它们直到它们通过。

要将其停用,请将failed_mode: :none添加到Guardfile中的RSpec选项:

rspec_opts = {
  failed_mode: :none,
  # other options...
}

guard :rspec, rspec_opts do
  # watches, etc...
end

有关详细信息,请参阅:https://github.com/guard/guard-rspec

答案 1 :(得分:1)

guard-rspechttps://github.com/guard/guard-rspec/issues/243)中已确认的问题。如果您将guard-rspec更新为4.5.0版,则应修复此问题。

答案 2 :(得分:0)

对不起,这已经很晚了,但其他人可能会来寻求答案。

我不确定这正是您所需要的,但听起来您正在对要执行的文件进行更精细的控制。

Conditional Watch听起来可以给你更好的控制。

语法可以改为稍微冗长的语法,但重点是你可以引入参数并将它们传递给具有更复杂逻辑的方法,我相信params是一个大小为3的数组形式:

["path/to/controller", "controller_name", "controller"]

然而,自从我设置它以来已经有一段时间了,所以你可以通过执行以下操作来查看它们。

#add a watch to all view files in the app directory and print the params to stdout
watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |params| puts params}

然后只是玩弄你想要的逻辑。