如何将 guard-rspec 映射到多个不同的文件?

How to map guard-rspec to multiple different files?

假设我在 app/controllers

中有一个 controller

我有一系列 request 规格,一个对应控制器中的每个动作。我如何在观看控制器时告诉 guard 不仅要 运行 spec/controllers/controller_spec.rb 文件还要 运行:

?

更新:

在@TheChamps 的帮助下,我开始了。对于这个用例,这是正确的方法吗?

  # Controller could be under api/v1 or root level.
  watch(%r{^app\/controllers(\/api\/v1\/)?(.+)_(controller)\.rb}) do |m|
    "spec/requests#{m[1]}#{m[2]}/"
  end

您可以使用 guard-rails gem 由 $ guard init rails 生成具有 Rails.

默认配置的守卫清单文件

watch 命令非常简单。通过 regex,您可以定义观看的位置和触发的内容。

一个例子

从他们的文档中获取这个标准命令:

watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }

第一部分

watch(%r{^app/(.+)\.rb$})

它会查找 app 目录中以 .rb 结尾的任何文件,并将路径作为参数 - 通过 ()。如果保存匹配文件,例如 app/models/users.rbmodel/users 将传递给:

{ |m| "spec/#{m[1]}_spec.rb" }

通过插入传递的参数,它会在 spec 目录中查找特定文件以触发 - spec/models/user_spec.rb.

您的用例

保存您的控制器文件后,您想要触发位于 /requests 下以及该控制器 之后名为 的子文件夹下的任何文件。现在你应该可以很容易地理解这个命令,它实现了这一点。

watch('app/controllers/(.*)_controller.rb') { |m| "spec/requests/#{m}" }