2012-07-03 16 views
9

我有一個非常奇怪的RSpec的情況。我試圖測試我的函數是否正確處理異常。而下面是我的代碼:RSpec的用於should_receive和should_not_receive都通過了異常

在User.rb

def welcome_user 
     begin 
     send_welcome_mail(self) 
     rescue Exception => exception 
     ErrorMessage.add(exception, user_id: self.id) 
     end 
    end 
end 
在user_spec.rb

it "adds to error message if an exception is thrown" do 
    mock_user = User.new 
    mock_user.stub(:send_welcome_mail).and_raise(Exception) 
    ErrorMessage.should_receive(:add) 
    mock_user.welcome_user 
end 

通過了測試,但是當我改變ErrorMessage.should_receive(:add)ErrorMessage.should_not_receive(:add),它也通過了,有什麼見解?

+0

我也碰到過同樣的事情發生的測試,但它與rspec 2.11消失。看看是否有差別你 – prusswan

回答

5

由於暴露我的測試中表現出這種「異常」一個RSpec的2.11,我決定提高GitHub上的問題。你可以在https://github.com/rspec/rspec-mocks/issues/164

摘要以下的討論:any_instance.should_not_receive是不確定的,避免

+1

我最終設法解決這個問題,事實證明我的異常掐滅的方法也被用在邏輯流,這是問題的主要問題在什麼地方調用。 –

4

什麼,你可以嘗試改用在組合.should_receive.never

ErrorMessage.should_receive(:add).never