我已经在Apt模型上创建了一个自定义验证,如果表单提交在下午3点之后完成并且我正在尝试确定运行该表单的最佳方式,则验证第二天无法预约约会单元测试以验证我的自定义验证是否正常工作。
目前,我的测试包含一个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
我想知道是否有办法在运行测试时临时设置系统时间,以便无论测试何时运行,我都可以测试两个断言。
答案 0 :(得分:6)
我强烈推荐timecop gem,它是根据您提到的要求编写的。查看github页面上的文档,特别是freeze
方法(或travel
,但最好在示例中针对冻结的系统时间进行测试。)
答案 1 :(得分:5)
更简单的方法是使用模拟框架来存储来自DateTime.current
调用的响应,以返回您的硬编码值。
这可以避免弄乱你的系统时钟。
答案 2 :(得分:0)
系统时间与您的操作系统有关,而与您的应用程序无关。因此,如果您想设置它,那么您可以使用它进行设置 date --set =“STRING” 在Linux中。