如何强制运行所有RSpec规范忽略:焦点标记

时间:2013-02-18 05:23:55

标签: rspec rspec2

鉴于以下RSpec配置(v2.12.0):

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

有时人们忘记从规范中移除:focus标记,并且在我们希望运行所有规范的持续集成环境中,只运行带有剩余:focus标记的规范。

我试过了:

rspec --tag ~focus

...运行所有规格,不包括标记为:focus

的规格

有没有办法强制运行所有规范,忽略使用rspec命令行选项的任何标记?

4 个答案:

答案 0 :(得分:11)

我刚把它添加到一个项目中:

config.before :focused => true do
  fail "Hey dummy, don't commit focused specs." if ENV['FORBID_FOCUSED_SPECS']
end

在我们的持续集成服务器运行的脚本中:

export FORBID_FOCUSED_SPECS=true

答案 1 :(得分:7)

您可以删除这些行:

 config.filter_run :focus => true
 config.run_all_when_everything_filtered = true

告诉用户使用rspec --tag focus运行重点测试。这样,CI将始终运行完整的测试套件。

您可以考虑检查配置块中的环境并适当地包括/排除filter_run设置。

另一个想法:如果你正在使用git,请设置一个预提交钩子,以防止:focus的规范首先进入代码库。

答案 2 :(得分:7)

我希望在设置焦点时自动在我们的持续集成服务器上失败。这是基于myronmarston的code重写的,可以正确使用rspec-rails 3.2.0:

  config.before(:example, :focus) do
    fail 'This example was committed with `:focus` and should not have been'
  end if ENV['CI']

答案 3 :(得分:5)

尝试:rspec --tag focus --tag ~focus