给定以下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
Run Code Online (Sandbox Code Playgroud)
有时人们忘记:focus从规范中删除标记,并且在我们希望运行所有规范的持续集成环境中,只运行带有剩余:focus标记的规范.
我试过了:
rspec --tag ~focus
Run Code Online (Sandbox Code Playgroud)
...运行所有规格,不包括那些标记为:焦点
有没有办法强制运行所有规格忽略任何标签使用rspec的命令行选项?
小智 11
我刚把它添加到一个项目中:
config.before :focused => true do
fail "Hey dummy, don't commit focused specs." if ENV['FORBID_FOCUSED_SPECS']
end
Run Code Online (Sandbox Code Playgroud)
在我们的持续集成服务器运行的脚本中:
export FORBID_FOCUSED_SPECS=true
Run Code Online (Sandbox Code Playgroud)
你可以删除这些行:
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
Run Code Online (Sandbox Code Playgroud)
并告诉用户运行重点测试rspec --tag focus.这样,CI将始终运行完整的测试套件.
您可以考虑检查配置块中的环境并filter_run适当地包括/排除设置.
另一个想法:如果你正在使用git,设置一个预提交钩子,以防止规范首先:focus爬进代码库.
我想在设置焦点时自动在我们的持续集成服务器上失败.这是根据myronmarston的代码重写,以便与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']
Run Code Online (Sandbox Code Playgroud)
尝试: rspec --tag focus --tag ~focus
| 归档时间: |
|
| 查看次数: |
2424 次 |
| 最近记录: |