2011-08-11 90 views
18

我想運行RSpec測試,並且我想檢測測試是否在after方法中失敗。我有這樣的事情現在:檢測每個方法後Rspec測試失敗

after(:each) do 
    cc = ConnectController.new() 
    cc.update(<TEST-SERVER-CONTROLLER>, <TC-RESULT-ID>, result?)  
end 

正如你所看到的,result?的功能是什麼,我需要更換,來檢測,如果測試失敗與否,並且還可以獲得關於失敗的測試信息。

回答

12

編輯:此答案僅適用於RSpec 2。對於RSpec 3請參閱geekazoid的答案。

的中類通過檢查exception方法上example正是如此公開example,你可以檢測到故障的情況下每個塊運行後:

after(:each) do 
    if example.exception != nil 
    # Failure only code goes here 
    end 
end 
15

除了丹尼爾的回答,在Rspec3示例方法是刪除(有關更多信息,請參閱here)。

你將不得不做這樣的事情:

after(:each) do |example| 
    if example.exception 
    # ... 
    end 
end 
0

我一直在尋找如何在after(:context)/after(:all)塊,如果成功,檢查所有的例子在一組。這是我想出的:

after(:all) do |example_group| 
    if example_group.class.examples.select { |ex| ex.exception }.empty? 
    # runs only if there are no failures 
    do('something') 
    end 
end