2011-03-16 76 views
7

我想發現與BDD丟失:包括ActiveRecord :: Base.find方法的參數。所以我的想法是有符合規格是這樣的:期望方法調用和代理到原始方法與RSpec

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 

如果#child或#other_children協會並不急於加載,期望應該失敗的東西,如: 「預期的ActiveRecord :: Base.find被調用一次,但它被援引了2次以下參數:1. ...; 2. ...「

有沒有人知道是否有一些匹配器如此工作或如何做到這一點。

感謝

+0

我有同樣的問題。真的希望有一個。有用的測試如果有效?在依賴模型或某事上被調用以確保層次結構被驗證/保存。 – 2011-07-21 04:05:07

+0

可能的重複[是否有一個較少侵入性的替代Rspec \'應\ _receive \'?](http://stackoverflow.com/questions/12159536/is-there-a-less-intrusive-alternative-to-rspecs - 應該收到) – lulalala 2014-03-17 07:53:46

回答

5

認爲我有同樣的問題here。在你的具體情況下,我會做這個,我覺得很乾淨。

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

我相信你可以擴展Rspec的Mocks::MessageExpectation類包括and_proxy_to_original_method方法,應該不會太難,但我沒有看過。

+0

嗯......我喜歡這個主意。將檢查並返回結果。謝謝 – BurmajaM 2011-09-05 12:46:57