如何在服务类

时间:2017-11-10 02:00:00

标签: ruby-on-rails ruby rspec

在我的课程中模拟我的AR协会链的输入的正确方法是什么

class OfficeHourScheduler 
  def initialize(company)
    @company = company
  end

  def active_office_holiday
    @company.office_holidays.active
  end
end

所以在我的Rspec中,我想测试active_office_holiday的输出而不在DB中创建任何实际数据。

目前我正在测试这样,不确定它是否是最佳方式。

  expect_any_instance_of(Company).to receive_message_chain('office_holidays.active')

2 个答案:

答案 0 :(得分:0)

expect ... to receive模式无法确保您获得正确的结果,对吗?

一个问题是,为什么你不想在数据库中创建数据?它只是在测试数据库。

我会在数据库中创建几条记录。例如。 2家公司A& B和公司A的2个office_holidays,一个处于活动状态,一个处于非活动状态,B公司的一个office_holiday处于活动状态。

当您将公司A传递到您的班级时,我希望@company.office_holdays能够返回这两个相应的记录。在您致电active后,这两个假期都应该有效。

答案 1 :(得分:0)

在您当前的测试中,您没有测试范围的结果,而只是调用来自office_holidays的{​​{1}}和active这一事实。

你可以这样做的一种方法是,例如:

Company