2013-02-18 84 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