警卫,如何暂时跟踪特定文件?

时间:2013-01-23 11:19:13

标签: ruby guard

我正在使用Guard gem

在开发的某个时候,我只需要跟踪特定文件或多个文件,而不是整个项目。

是否有一些方便的方法来临时跟踪特定文件?

我知道可以通过修改防护文件来完成,但我不认为它是一个简洁的解决方案。

4 个答案:

答案 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告诉后卫在没有任何过滤的情况下运行所有​​测试,即使该名称听起来有误导性。

我发现Ryan Bate的钢轨演员对GuardSpork非常有帮助。

答案 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添加命令以运行后卫。