Guard:如何从 Guard 的控制台运行特定标签?

Mel*_*emi 1 rspec ruby-on-rails guard spork

我在我的 RSpec 测试套件中使用了 Spork 和 Guard。我从运行中排除慢测试:

RSpec.configure do |config|
  ...
  config.filter_run_excluding slow: true
  ...
end
Run Code Online (Sandbox Code Playgroud)

然后当我需要在单独的 shell 中运行慢速测试时: rspec . --tag slow

我想知道是否有一个快捷方式可以在Guard 自动运行其测试的同一个shell 中运行慢标签?

有控制台>提示吗?在查看文档后,我发现键入 >. rspec . --tag slow有效……但这比切换到另一个外壳要冗长一些。似乎这是一个相当普遍的要求。想法?

Net*_*rat 6

您可以定义组并在每个组中具有不同的 rspec 配置。

将下面的代码附加到 的内容中/Guardfile

scope group: :fast

group :fast do
  guard 'rspec', cli: '--tag ~slow' do
    # code for watching
  end
end

group :slow do
  guard 'rspec', cli: '--tag slow' do
    # code for watching
  end
end
Run Code Online (Sandbox Code Playgroud)

当您启动 Guard 时,它默认为快速规格:

$ guard                                                                                                          
21:56:35 - INFO - Guard::RSpec is running
21:56:35 - INFO - Guard is now watching at '/Users/michi/testproject'
[1] {Fast} guard(main)>
Run Code Online (Sandbox Code Playgroud)

按 Enter 将运行所有快速规格:

22:02:00 - INFO - Run Fast
22:02:00 - INFO - Running all specs
Run options: exclude {:slow=>true}
Run Code Online (Sandbox Code Playgroud)

现在你可以通过按 运行所有慢的slow

[2] {Fast} guard(main)> slow
22:02:50 - INFO - Run Slow
22:02:50 - INFO - Running all specs
Run options: include {:slow=>true}
Run Code Online (Sandbox Code Playgroud)

您还可以将范围切换到慢速规格并按 Enter 运行它们:

[3] {Fast} guard(main)> scope slow
[4] {Slow} guard(main)>
22:03:30 - INFO - Run Slow
22:03:30 - INFO - Running all specs
Run options: include {:slow=>true}
Run Code Online (Sandbox Code Playgroud)

希望有帮助!