ruby-on-rails – stub_chain和should_receive

我试图测试一个方法调用链中的一个方法获取一个特定的参数.在下面的代码中,例如MyModel必须接收方法offset的参数0.不幸的是,下面的代码不起作用.似乎不可能混合使用should_receive和stub_chain.我该如何解决?我正在使用RSpec 2.
MyModel.should_receive(:offset).with(0).stub_chain(:tag_counts,:offset,:limit,:order).and_return([]) # does not work!

我试图测试的代码

tags = taggable.tag_counts.offset(page-1).limit(per_page).where(*where_clause).order("count DESC")

更新

我还发布了RSPec Google Group的问题,David(RSpec的创始人)回答了(感谢David):http://groups.google.com/group/rspec/browse_thread/thread/6b8394836d2390b0?hl=en

解决方法

这是我现在所做的一个规范中的一个例子.这有点不方便(原因很多行),但它的工作原理:
SearchPaginationModel.stub(:tag_counts) { SearchPaginationModel }
SearchPaginationModel.should_receive(:offset).with(0) { SearchPaginationModel }
SearchPaginationModel.stub_chain(:limit,:where,:order) { [] }
SearchPaginationModel.stub_chain(:tag_counts,:count).and_return(1)
SearchPaginationModel.search_tags(:page => "1")

这样就可以设置真正偏移0的SearchPaginationModel.tag_counts.offset(0).limit(X).where(X).order(X)中的测试.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...