如何使用RSpec测试Rails中的复杂关系?

时间:2016-03-31 07:45:41

标签: ruby-on-rails rspec rspec-rails

首先,这个问题可能会偏离意见,但我认为这是一个有价值的问题。我将为我的应用程序提供一个非常具体的示例,用于处理缺勤管理和跟踪。

Account有很多UsersUser有很多AbsencesAccount可以创建PublicHolidays,在计算Absence使用的天数时应忽略该值{。}}。

示例:如果某人休息一周,则使用的天数为5.如果其中一天是PublicHoliday,则使用的天数为4天。

我想实现一种方法,以便在创建PublicHoliday时,创建日期之前创建的任何Absences使用的日期与PublicHoliday的日期相交重新计算。

我目前的RSpec测试如下:

it 'triggers a recalculation of absence days on create for absences created before the date of creation of the public holiday' do
  robin = FactoryGirl.create(:robin)
  absence = FactoryGirl.create(:basic_absence, user: robin)
  expect(absence.days_used).to eq(1)
  ph = FactoryGirl.create(:public_holiday, country: "England", account: robin.account)
  expect(absence.reload.days_used).to eq(0)
end

在此测试中,phabsence的日期相同,因此我希望它计算一天开始,然后我打算使用后创建回调来重新计算使用的天数。

这是进行此测试的正确方法吗?如果没有创建大量关联对象,是否有更有效的方法?

1 个答案:

答案 0 :(得分:2)

首先 - 最好使用evenBits | oddBits而不是局部变量,其次 - 拆分测试,以便每个测试只测试一件事。第三:任何为测试设置上下文的东西都应放入上下文块中(即使在该上下文中只有一个测试)

例如,这是以标准方式重写您的规范:

let