虽然应用程序将使用系统时钟运行方法,
对时间或日期敏感的方法进行测试可能会变得混乱。 人们可以改变固定装置:
如:
availability_date: <%= Date.today %>
代替 availability_date: 2024-06-24
然而,当考虑与通常当前日期相距 N 天的方法时,这可能会使夹具集超载,从而插入更多错误机会(检测到或未检测到);最好使用从数据库中提取的数据子集,其中数据是正确的并且按预期工作。
是否有任何方法可以存根测试对系统时钟的使用,以便在实际日期远远超过该日期时反映
2024-06-24
?
Timecop gem 是 Ruby 中用于测试时间相关代码的有用工具。它允许您“冻结”时间,旅行到不同的时间点(过去或未来),并操纵时间来测试代码在不同时刻的行为。例如:
Timecop.freeze(Time.local(2020, 12, 25)) do
puts Time.now # Outputs 2020-12-25 00:00:00
end
或
Timecop.freeze(30.days.ago) do
puts Time.now # DateTime.now - 30.days
end