我正在使用Guard gem
在开发的某个时候,我只需要跟踪特定文件或多个文件,而不是整个项目。
是否有一些方便的方法来临时跟踪特定文件?
我知道可以通过修改防护文件来完成,但我不认为它是一个简洁的解决方案。
答案 0 :(得分:11)
实际上,您可以在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
告诉后卫在没有任何过滤的情况下运行所有测试,即使该名称听起来有误导性。
答案 1 :(得分:3)
也许groups会对你有用吗?
# In your Guardfile
group :focus do
guard :ruby do
watch('file_to_focus_on.rb')
end
end
# Run it with
guard -g focus
我知道你提到你不想修改Guardfile,但添加一个组只需要做一次,而不是每次你从观看项目切换到专注的设置并返回。
当然,如果您需要关注的文件集更改,您需要将参数更改为watch
(并可能添加更多观察者),但我认为您必须在某处指定它们这似乎是一个好地方。
或者,如果您确实不想在Guardfile中列出要关注的文件,则可以从单独的文件或环境中读取:focus 组的文件列表David above建议的变量。 Guardfile只是普通的ruby(可以访问保护DSL),所以很容易读取文件或ENV变量。
答案 2 :(得分:1)
如果您使用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设置)文本的规范。
答案 3 :(得分:0)
您可以永久修改保护文件以检查您选择的环境变量,如果存在,则表现不同。例如,访问变量ENV ['FILE']。然后,您可以随时使用FILE=foo.rb
添加命令以运行后卫。