2013-04-18 72 views
2

是否有某種編程方式來強制rspec測試在第一次失敗時停止?在第一次失敗時停止執行特定的rspec測試(不是測試套件)

例如,

  1. 我有一個測試套件夫婦的RSpec的測試,我在一次運行它們。
  2. 每個RSpec的測試位於單獨spec.rb文件

如果在這些測試中發生了一些問題,我想進一步阻止在那個特定的測試步驟失敗的具體測試的執行,但不要停止執行我正在運行的整個測試套件。

我知道有一種方式如下:

RSpec.configure do |c| 
    c.fail_fast = true 
end 

但在任何我在我的測試套件運行規範文件的定義它會導致套件的所有執行失敗。

任何方式可以處理這種情況?

在此先感謝

+0

確切地理解你想要的東西有點困難,但是你的意思是如果可以停止在特定文件中運行的所有測試(如果發生故障的同時仍繼續在套件中運行其他測試)?如果是這樣,我不確定這是否可能。如果你的意思是可以運行整個測試套件,但是立即顯示任何失敗信息,以便在其他測試仍然可以繼續運行的同時進行調查,那麼請嘗試[Fuubar gem](https:// github)。 COM/jeffkreeftmeijer/fuubar)。 –

+0

所以我的想法如下: 1.我有我的測試套件中的5個spec測試 2.每個測試都在單獨的spec文件中 3.每個測試都包含一些驗證完成的上下文。 4.我運行命令rspec。運行完整的測試套件 5.當一個測試(一個文件)內的某個上下文中出現某些內容失敗時,我想停止執行該特定上下文,而不是在該測試中繼續執行,而是執行其他spec文件。 這是可以做到的嗎? –

回答

3

我知道這是一個老問題,但我碰到它絆倒了,而在尋找實現這一相同的行爲自己。經過無數次的搜索之後,我想出了一些相當直接的實現,它實際上提供了所需的行爲!

只需添加下列各規格文件來跳過隨後的實施例(在該特定文件)在發生異常時:

before :all do 
    $continue = true 
    end 

    around :each do |example| 
    if $continue 
     $continue = false 
     example.run 
     $continue = true unless example.exception 
    else 
     example.skip 
    end 
    end 

的這裏邏輯應該是不言自明。繼續運行示例,直到發生異常,然後跳過該規範的其餘示例。由於每個鉤子可以控制每個示例的執行,所以它很好地促進了該邏輯。有關「around」鉤子的更多信息,請參閱RSpec documentation