我正在使用Guard gem
在开发的某些时候,我只需要跟踪一个特定的文件或几个文件,而不是整个项目。
是否有一些方便的方法来临时跟踪特定文件?
我知道可以通过修改保护文件来完成,但我认为这不是一个很好的解决方案。
实际上,您可以focus: true
在it
语句中使用,例如:
在您的规范文件中。
it "needs to focus on this!", focus: true do
#test written here.
end
然后在 spec/spec_helper 你需要添加配置选项。
RSpec.configure do |config|
config.treat_symbols_as_metadata_keys_with_true_values = true
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end
然后 Guard 将自动选择集中的测试并只运行它。此外,config.run_all_when_everything_filtered = true
即使名称听起来具有误导性,当没有过滤任何内容时,也会告诉警卫运行所有测试。
也许团体会为你工作?
# In your Guardfile
group :focus do
guard :ruby do
watch('file_to_focus_on.rb')
end
end
# Run it with
guard -g focus
我知道您提到您不想修改 Guardfile,但添加组只需要完成一次,而不是每次您从观看项目切换到集中设置并返回时。
当然,如果您需要关注的文件集发生变化,您需要将 args 更改为watch
(并且可能添加更多观察者),但我认为您必须在某处指定它们,这似乎是一个好地方任何。
或者,如果您真的不想在 Guardfile 中列出要关注的文件,您可以让:focus组从单独的文件或环境变量中读取文件列表,如上面David 所建议的那样。Guardfile 只是普通的 ruby(可以访问 Guard DSL),因此很容易读取文件或 ENV 变量。
如果您使用guard-rspec。你可以这样做。
更改您的Guardfile rspec 块,使其具有如下内容:
guard 'rspec', :cli => ENV['RSPEC_e'].nil? ? "": "-e #{ENV['RSPEC_e']}") do
# ... regular rspec-rails stuff goes here ...
end
开始守卫。并在之前设置RSPEC_e。像这样...
RSPEC_e=here guard
然后,每当您更改某些内容时,只会重新运行在其描述中包含文本“here”(由 RSPEC_e 设置)的规范。
您可以永久修改保护文件以检查您选择的环境变量并在存在时采取不同的行为。例如,访问变量 ENV['FILE']。然后,您可以随时添加运行警卫的命令FILE=foo.rb
。