Rails / Rspec Stubs:指定顺序&等等

时间:2011-05-24 23:09:49

标签: ruby-on-rails rspec stub

我很乐意创建基本存根,但对于如何指定诸如顺序(和反转它)之类的东西有点困惑。

举一个具体的例子,这是我想要测试的控制器中的一行:

@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)>]

尽管是不准确的测试(不测试订购),我猜测规范会通过。它没有 - 它从数据库中提取,而不是模拟。 Soo ...我想我要问的是,我如何存根Course.order('created_at')。反向?

非常感谢......

1 个答案:

答案 0 :(得分:2)

你假设ActiveRecord会在某个时刻调用Course.all,但情况可能并非如此。

试试这个:

Course.stub_chain(:order, :reverse) { [mock_course] }

为了避免必须进行链接存根,您可以将ActiveRecord代码移动到模型中,这样控制器就会有更简单的内容,例如:

Course.all_by_newest_first