相关疑难解决方法(0)

Rails 3,RSpec 2.5:使用带有命名范围的should_receive或stub_chain

我使用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),因此必须以某种方式实现,否则测试确实非常脆弱.

谢谢!

更新:另请参阅GitHub上的问题报告.

bdd activemodel arel rspec2 ruby-on-rails-3

12
推荐指数
1
解决办法
1803
查看次数

标签 统计

activemodel ×1

arel ×1

bdd ×1

rspec2 ×1

ruby-on-rails-3 ×1