首先,这个问题可能会偏离意见,但我认为这是一个有价值的问题。我将为我的应用程序提供一个非常具体的示例,用于处理缺勤管理和跟踪。
Account
有很多Users
而User
有很多Absences
。 Account
可以创建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
在此测试中,ph
与absence
的日期相同,因此我希望它计算一天开始,然后我打算使用后创建回调来重新计算使用的天数。
这是进行此测试的正确方法吗?如果没有创建大量关联对象,是否有更有效的方法?
答案 0 :(得分:2)
首先 - 最好使用evenBits | oddBits
而不是局部变量,其次 - 拆分测试,以便每个测试只测试一件事。第三:任何为测试设置上下文的东西都应放入上下文块中(即使在该上下文中只有一个测试)
例如,这是以标准方式重写您的规范:
let