鉴于以下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命令行选项的任何标记?
答案 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