2013-02-18 44 views
11

如何强制运行所有的RSpec规格忽略:由于以下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 

...它运行不包括标有所有规格:重点

有没有办法使用的RSpec的命令强制运行ALL规格忽略任何标签线路选项?

回答

6

你可以删除行:

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

,并告诉用户与rspec --tag focus运行集中测试。这样CI将永远运行完整的测试套件。

您可能会考虑检查配置块中的环境,并适当地包括/不包括filter_run设置。

另一个想法:如果您使用的是git,请设置一个预先提交的钩子,以防止:focus规范爬到代码库中。

+3

使用环境变量似乎是一个明智的解决方案,例如: 'config.filter_run:焦点=> true,除非ENV ['CI']' – prashantrajan 2013-02-19 10:48:54

+0

@prashantrajan这对我不起作用。我们的Codeship服务器在部署到CI之前运行测试。正如预期的那样,他们在ENV ['TEST'] – 2017-04-18 01:41:49

9

我只是说这一个项目:

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

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

export FORBID_FOCUSED_SPECS=true 
+0

中运行测试,因为我不喜欢使用Rails.env.ci?,它可以被我们使用测试环境的Codeship测试运行使用。 – 2017-04-18 01:40:13

+0

我喜欢这个想法,但我更愿意强迫用户选择这种行为(即ENV ['ALLOW_FOCUSED_SPECS']')。这种方式默认行为是失败,如果有任何重点规格。 – 2018-02-23 19:01:54

5

我想我们的持续集成服务器上自动失效时,重点是组。这是改写基于code从myronmarston与rspec的护栏3.2.0正常工作:

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

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

+0

乍一看,这看起来很完美,但通过'filter_run',这与'rspec --tag_focus'具有相同的效果: - 专注的规格被排除。 – 2017-07-25 15:49:49

相关问题