2011-03-16 75 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