RSpec

2011-03-16 33 views
7

ile orijinal yönteme yöntem çağrısı ve proxy yöntemini beklemeyin BDD eksikken bulmak istiyorum: ActiveRecord :: Base.find yöntemi için params ekleyin. çağırılacak "Beklenen ActiveRecord :: Base.find: gibi #child veya #other_children dernekler yüklenen istekli değilsenizRSpec

ActiveRecord::Base.should_receive(:find).once.and_proxy_to_original_method 
parent = SomeClass.find 34 
parent.child.should be_loaded 
parent.other_children.should be_loaded 

, beklenti şey ile başarısız olmalıdır: Yani benim fikrim böyle Spec şeye sahip olmaktır Bir kez ama aşağıdaki args ile 2 kez daha çağırıldı: 1. ...; 2. ... "

Böyle çalışan bir eşleştirici var mı, yoksa bunu nasıl yapacağını bilen var mı? Ben düşünüyorum

Teşekkür

+0

Aynı sorun var. Gerçekten bir tane olsaydı. Geçerli olup olmadığını test etmek için kullanışlıdır? hiyerarşinin doğrulanmasını/kaydedilmesini sağlamak için bağımlı bir modele veya bir şeye çağrıldı. arasında –

+0

olası yinelenen (http://stackoverflow.com/questions/12159536/is-there-a-less-intrusive-alternative-to-rspecs [RSpec en \ 'gerektiği \ _receive \'? için daha az müdahaleci bir alternatif var mı] -should-almak) – lulalala

cevap

5

Aynı sorun here vardı. Özel durumunuzda, oldukça temiz bulduğum şeyi yapardım.

original_method = ActiveRecord::Base.method(:find) 
ActiveRecord::Base.should_receive(:find).once do (*args) 
    original_method.call(*args) 
end 

Sana, and_proxy_to_original_method yöntemini içerecek şekilde RSpec Mocks::MessageExpectation sınıfını genişletmek olabilir çok zor olmamalı inanıyorum ama bakmadım.

+0

Hmmm ... Bu fikri beğeniyorum. Bunu kontrol edip sonuç ile geri dönecek. Teşekkürler – BurmajaM