我有一個rspec測試,我期望失敗,但它通過,因爲它正在測試的代碼挽救rspec引發的異常。這裏的情況爲例:Rspec誤報,因爲失敗異常在被測試的代碼中得到挽救
class Thing do
def self.method_being_tested(object)
# ... do some stuff
begin
object.save!
rescue Exception => e
# Swallow the exception and log it
end
end
end
在RSpec的文件:「object.save」
describe "method_being_tested" do
it "should not call 'save!' on the object passed in" do
# ... set up the test conditions
mock_object.should_not_receive(:save!)
Thing.method_being_tested(mock_object)
end
end
我知道,執行是到達被測試的方法的線,因此測試應該失敗,但測試通過。使用救援塊中的調試器,我發現以下幾點:
(rdb:1) p e # print the exception object "e"
#<RSpec::Mocks::MockExpectationError: (Mock "TestObject_1001").save!
expected: 0 times
received: 1 time>
所以基本上測試失敗了,但是,但故障是由非常代碼它試圖測試抑制。我找不到一種可行的方法來阻止這些代碼吞噬Rspec異常,而不會影響代碼。我不希望代碼明確檢查異常是否是Rspec異常,因爲這是不好的設計(應該爲代碼編寫測試,代碼不應該寫入測試)。但是我也無法檢查這個異常是否是我想讓它捕捉的特定類型,因爲我希望它抓住任何可以在正常生產環境中引發的任何類型。
有人在我面前肯定有這個問題!請幫我找一個解決方案。
你問是否有辦法捕捉所有異常,除了一種你不想捕捉的東西,而不檢查它在捕捉代碼中的異常類型。這裏的答案是否定的。 –