问题描述
||
我很乐于创建基本存根,但是对于如何指定诸如订单(和反转)之类的东西有些困惑。
举一个具体的例子,这是我要测试的控制器中的一行:
@courses = Course.order(\'created_at\').reverse
在我的控制器规格中,(显然是失败的)存根为:
Course.stub(:all) { [mock_course] }
...以及rspec错误:
Failure/Error: assigns(:courses).should eq([mock_course])
expected [#<Course:0x818614e8 @name=\"Course_1001\">]
got [#<Course id: 2,name: \"Second test course\",price: #<BigDecimal:1030e73c0,\'0.4995E2\',18(18)>]
尽管测试不准确(不是测试订购),但我猜想该规范会通过。它不是-它是从数据库而不是模拟数据库中提取的。如此...我想我要问的是,如何对Course.order(\'created_at \')。reverse存根?
非常感谢...
解决方法
您假设ActiveRecord会在某个时候调用Course.all,事实并非如此。
尝试这个:
Course.stub_chain(:order,:reverse) { [mock_course] }
为了避免必须进行链式存根,可以将ActiveRecord代码移到模型中,这样控制器就可以简化一些操作,例如:
Course.all_by_newest_first