加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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的说法,最好将所有这些范围放在更大的范围内,并在您的模型中进行规范.这个范围显然有一个特定的功能,所以就像一个方法的行为一样,它调用了其他几种方法,你可以指定连接其他几个范围的作用域的行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读