我已經在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