首页 > 解决方案 > 如何将警卫配置为仅执行与更改内容相关的测试与重新运行整个测试套件?

问题描述

在了解“守卫”(我使用的是 Gem 版本 2.14.2)并阅读此内容后,https: //www.chrisblunt.com/ruby-on-rails-running-tests-with-guard-and-docker/ ,我很好奇我是否在我的 rspec 测试中正确使用了防护。在我使用启动守卫控制台后

bundle exec guard

我正在寻找一种方法,以便在我只编辑一个文件时不会运行我的整个 rspec 测试套件。是否可以配置守卫,使守卫仅针对特定规范运行测试?例如,如果我编辑文件

lib/folder1/myclass.rb

和规格文件

spec/lib/folder1/myclass_spec.rb

对 lib/folder1/myclass.rb 的更改不会导致整个测试套件运行,而只会导致 spec/lib/folder1/myclass_spec.rb 或至少只有依赖于更改后的类的规范?

标签: ruby-on-railsrspecruby-on-rails-5guard

解决方案


鉴于我的 Gemfile 中有合适的宝石,

gem 'guard', '~> 2.16.2'
gem 'guard-rspec', '~> 4.7.3'

我有一个 Guardfile,

然后假设我只想在文件更改spec/policies/user_policy_spec.rb时运行app/policies/user_policy.rb文件,然后我将以下防护添加到我的 Guardfile。

guard :rspec, cmd: "bundle exec rspec" do
  watch(%r{^app/policies/(.+)\.rb$})     { |m| "spec/policies/#{m[1]}_spec.rb" }
end

推荐阅读