Guard未检测到控制器文件更改

时间:2019-09-18 18:18:00

标签: guard

我有一个Rails API,因此所有控制器都位于app/controllers/api/v1/中,并且当我保存控制器文件时,测试文件不会运行。

例如,我在app/controllers/api/v1/images_controller.rb中有一个文件spec/requests/api/v1/images_controller_spec.rb和一个测试文件。 我要保存控制器文件,但测试文件无法运行,但是,当我保存测试文件时,测试文件将运行。

这是我的Guardfile

clearing :on
guard :rspec, cmd: 'bundle exec rspec' do
  require 'guard/rspec/dsl'
  dsl = Guard::RSpec::Dsl.new(self)

  # Feel free to open issues for suggestions and improvements

  # RSpec files
  rspec = dsl.rspec

  watch(rspec.spec_helper) { rspec.spec_dir }
  watch(rspec.spec_support) { rspec.spec_dir }
  watch(rspec.spec_files)

  # Ruby files
  ruby = dsl.ruby
  dsl.watch_spec_files_for(ruby.lib_files)

  # Rails files
  rails = dsl.rails(view_extensions: %w[erb haml slim])
  dsl.watch_spec_files_for(rails.app_files)
  dsl.watch_spec_files_for(rails.views)
  watch(rails.controllers) do |m|
    [
      rspec.spec.call("routing/#{m[1]}_routing"),
      rspec.spec.call("controllers/#{m[1]}_controller"),
      rspec.spec.call("acceptance/#{m[1]}")
    ]
  end
  # Rails config changes
  watch(rails.spec_helper)     { rspec.spec_dir }
  watch(rails.routes)          { "#{rspec.spec_dir}/routing" }
  watch(rails.app_controller)  { "#{rspec.spec_dir}/controllers" }
end

感谢您的帮助,因为我不理解它是如何工作的。谢谢。

1 个答案:

答案 0 :(得分:0)

我自己回答了这个问题。我将测试文件添加到spec/controllers/api/v1/并保存了控制器文件,然后运行了测试,因此它告诉我我需要另一个规则

rspec.spec.call("requests/#{m[1]}_controller")

它有效。