ruby-on-rails-3 – Rails 3,RSpec 2.5:使用带有命名范围的shou
发布时间:2020-12-16 19:34:01 所属栏目:百科 来源:网络整理
导读:我使用的是Rails 3.0.4和RSpec 2.5.例如,在我的控制器中,我使用命名范围 @collection = GuestbookEntry.nonreplies.bydate.inclusive.paginate( :page = params[:page],:conditions = { ... }) 在我的测试中,我想要能够模拟这样一个查询的结果,而不是文字.我
我使用的是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. 解决方法
这个问题已经使我一段时间了!
我相信行为与Rails 2不同的原因是因为在控制器中的变量赋值期间不再执行查询.相反,它根据需要懒惰加载. 我同意Mark Wilden的说法,最好将所有这些范围放在更大的范围内,并在您的模型中进行规范.这个范围显然有一个特定的功能,所以就像一个方法的行为一样,它调用了其他几种方法,你可以指定连接其他几个范围的作用域的行为. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |