我已经在Apt模型上创建了一个自定义验证,验证如果表单提交是在下午3点之后完成的,则无法为第二天预约约会,试图确定运行单元测试以验证我的自定义验证工作正常的最佳方式。使用Ruby临时设置系统时间以进行单元测试
目前,我的测试包含一个if语句来检查测试在下午3点之前还是之后运行,并使用基于当前系统时间的不同测试。但是,无论系统时间是什么,我都希望能够测试这两种情况。
test "booking appointment for tomorrow before/after three pm" do
a = appointments(:aptone)
# Set appointment date to tomorrow
a.apt_date = DateTime.current + 1.day
if (Time.current.hour >= 12)
assert(a.invalid?, 'Appointment CANNOT be booked after 3 PM')
elsif
assert(a.valid?, 'Appointment CAN be booked before 3 PM')
end
end
我想知道是否有一种方法可以临时设置系统时间运行测试一段时间,所以我可以测试断言,无论当测试跑的。
您可能还想考虑让您的测试(和应用程序!)时区感知。看起来你现在的测试很容易就可以通过在另一个时区执行来破解。 – emrass 2012-08-03 13:42:50
timecop宝石是我基于时间的测试的完美解决方案。谢谢! 我已经在environment.rb文件中指定了时区。我不确定是否需要采取更多措施,以防止在另一时区运行时出现问题。 – dspencer 2012-08-03 17:11:49