【问题标题】:Guard, how to temporally track specific file?Guard,如何临时跟踪特定文件?
【发布时间】:2013-01-06 20:33:46
【问题描述】:

我正在使用Guard gem

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

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

我知道可以通过修改保护文件来完成,但我认为这不是一个很好的解决方案。

【问题讨论】:

  • 请详细说明您寻找此解决方案的原因。此外,它会始终跟踪单个文件,还是您可以想象要切换跟踪多个文件?
  • 如果我有很多失败的测试,守卫会给我带来一堆消息。这就是为什么我只想从我正在处理的文件中获取消息。

标签: ruby guard


【解决方案1】:

实际上你可以在it 语句中使用focus: true 例如:

在您的规范文件中。

it "needs to focus on this!", focus: true do
  #test written here.
end

然后你需要在 spec/spec_helper 中添加 config 选项。

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 的 rails casts 对 GuardSpork 非常有帮助。

【讨论】:

  • 非常感谢,最后一个配置变量非常具有误导性。建议编辑:因为config.treat_symbols_as_metadata_keys_with_true_values 已打开,所以规范行it "needs to focus on this!", focus: => true do 可以缩短为it "needs to focus on this!", :focus do
  • 对于 rspec 3 config.filter_run_when_matching :focus 就足够了,“当没有任何东西用 :focus 标记时,所有示例都会运行。”
【解决方案2】:

如果您使用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

然后,每当您更改某些内容时,只会重新运行描述中包含“此处”(由 RSPEC_e 设置)文本的规范。

【讨论】:

  • 还有--tag option,它可能比上面的更简单。 guard 'rspec', :cli => '-t focus' do ... 它只会运行标记为 focus => true 的示例,例如it "is giving me trouble", :focus => true do ...
  • 是的,标签也可以很好地工作,但是您必须标记您的规格。如果你使用 -e 你可以匹配文本...
【解决方案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,但添加组只需要完成一次,而不是每次您从观看项目切换到专注集并返回时。

当然,如果您需要关注的文件集发生变化,您需要将 args 更改为 watch(并且可能添加更多观察者),但我认为您必须在某处指定它们看起来和其他地方一样好。

或者,如果您真的不想在 Guardfile 中列出要关注的文件,您可以让 :focus 组从单独的文件或环境中读取文件列表David above 建议的变量。 Guardfile 只是普通的 ruby​​(可以访问 Guard DSL),因此很容易读取文件或 ENV 变量。

【讨论】:

  • 我喜欢它,但它会产生错误 - 无法加载 'guard/ruby' 或找到类 Guard::Ruby。我无法解决这个问题,有什么想法吗?
  • 我将guard :ruby 更改为guard 'rspec',一开始guard 运行正确的文件,但随后运行所有测试,所以没有太大变化。
  • ruby 保护插件可以在here 找到。使用guard-rspec 插件,有几种方法可以专注于几个文件。 @oto-brglez 在单独的答案中描述了一种使用 rspec 命令行选项的方法。 guard-rspec 自述文件有一个section 运行一个子集。如果这些指针对您不起作用,请告诉我,我可以更新答案并提供更多详细信息。
【解决方案4】:

您可以永久修改保护文件以检查您选择的环境变量,如果它存在,则行为会有所不同。例如,访问变量 ENV['FILE']。然后,您可以随时使用FILE=foo.rb 为运行守卫添加命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多