我使用的是Rails 3.0.4和RSpec 2.5.例如,在我的控制器中,我使用命名范围
@collection = GuestbookEntry.nonreplies.bydate.inclusive.paginate( :page => params[:page],:conditions => { ... })
在我的测试中,我想要能够模拟这样一个查询的结果,而不是文字.我不认为这样做是有道理的
GuestbookEntry.stub_chain(:nonreplies,:bydate,...).and_return(...)
因为这个测试将在我决定重新排序命名范围的那一刻失败.
使用Rails 2.3和RSpec 1.x,这很好:我可以写
GuestbookEntry.should_receive(:find).with(:all,:conditions => { ... })
并且上述呼叫将被捕获并被正确处理.然而,使用Rails 3,由于某种原因,这不再起作用.
为什么?如何对嵌套范围的结果设置期望或存根?由于Rails 3的ActiveModel中的所有内容都是一个命名范围(感谢ARel),所以这必须以某种方式进行,否则测试确实很脆弱.
谢谢!
更新:另见issue report on GitHub.