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

如何强制运行所有RSpec规范忽略:焦点标记,rspec,rspec2,Rspec,Rspec2,给定以下RSpec配置(v2.12.0): 有时人们忘记从规范中删除:focus标记,在我们希望运行所有规范的持续集成环境中,只有带有剩余:focus标记的规范才能运行 我试过: rspec --tag ~focus 。。。它运行所有规格,不包括标记为:焦点的规格 有没有一种方法可以使用rspec的命令行选项强制运行所有规范,忽略任何标记?您可以删除这些行: config.filter_run :focus => true config.run_all_when_everything

给定以下RSpec配置(v2.12.0):

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

我试过:

rspec --tag ~focus
。。。它运行所有规格,不包括标记为:焦点的规格


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

您可以删除这些行:

 config.filter_run :focus => true
 config.run_all_when_everything_filtered = true
并告诉用户使用
rspec--tagfocus
运行聚焦测试。这样,CI将始终运行完整的测试套件

您可以考虑在配置块中检查环境,并适当地包含/排除<代码>过滤器>运行/代码>设置。


另一个想法是:如果您使用的是git,请设置一个预提交挂钩,以防止带有
:focus
的规范首先进入代码库。

我刚刚在一个项目中添加了以下内容:

config.before :focused => true do
  fail "Hey dummy, don't commit focused specs." if ENV['FORBID_FOCUSED_SPECS']
end
在持续集成服务器运行的脚本中:

export FORBID_FOCUSED_SPECS=true

我想在设置焦点时,在我们的持续集成服务器上自动失败。这是基于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']

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

使用环境变量似乎是一个明智的解决方案,例如:
config.filter\u run:focus=>true,除非ENV['CI']
@prashantrajan对我不起作用。我们的Codeship服务器在部署到CI之前运行测试。正如所料,他们在ENV['TEST']中运行测试,我喜欢这样,因为与依赖Rails.ENV.ci?不同,它可以被我们使用测试环境的代码测试运行使用。我喜欢这个想法,但我更喜欢强制用户选择这种行为(即
ENV['ALLOW_-FOCUSED_-SPECS']
)。这样,如果存在任何聚焦规范,默认行为将失败。乍一看,这看起来很完美,但使用
filter\u run
这与
rspec--tag~focus
:-聚焦规范被排除在外。
  config.before(:example, :focus) do
    fail 'This example was committed with `:focus` and should not have been'
  end if ENV['CI']