2012-07-03 14 views
9

Gerçekten garip bir rspec senaryo oluşturdum. Fonksiyonumun istisnayı doğru şekilde yerine getirip getirmediğini test etmeye çalıştım. Ben ErrorMessage.should_not_receive(:add) için ErrorMessage.should_receive(:add) değiştirdiğinizde user_spec.rb içindeGerekirse için RSPEC gerekse_düzenlensin ve her ikisini de geçemedi. İstisna için

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

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 

geçti testi, ancak, aynı zamanda geçti: User.rb içinde

: Ve aşağıdaki benim kodudur herhangi bir anlayış?

+0

rastlamak Aynı şey olan bir test, ama rspec 2.11 ile gider. Bunun sizin için bir fark yaratıp yaratmadığını görün – prusswan

cevap

5

rspec 2.11 testlerimden birinin böyle bir "anormalliği" sergilemeye başlamasından bu yana konuyu github üzerine çıkarmaya karar verdim. Sen https://github.com/rspec/rspec-mocks/issues/164

Özet görüşülecek aşağıdaki olabilir: tanımsız any_instance.should_not_receive, bunun yerine kullanmayı deneyebilirsiniz Ne

+1

Bu sorunu en sonunda çözmeyi başarabildim, istisna ile dışarıda bıraktığım yöntem de mantık akışında bir yere daha önce çağrıldı, ki bu da sorunun ana meselesiydi. –

4

önlemek .never birlikte .should_receive geçerli:

ErrorMessage.should_receive(:add).never 
İlgili konular