首页 > 解决方案 > 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

感谢您的帮助,因为我不明白这一切是如何运作的。谢谢你。

标签: guard

解决方案


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

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

它有效。


推荐阅读