Timecop gem是专门为此目的而设计的。虽然它的设计使测试变得简单,但它不是一个“测试框架” - 它不需要rspec或rails,并且可以用于任何ruby项目。
的freeze
方法允许你静态模拟当前时间:
# Assume it is currently 12:00:00 on 3/1/2015
Timecop.freeze(Time.now + 30.minutes) do
puts Time.now # --> shows 12:30:00
do_something_for_fifteen_seconds
puts Time.now # --> still shows 12:30:00; time has not passed
end
的travel
方法允许你动态模拟当前时间:
Timecop.travel(Time.now + 30.minutes) do
puts Time.now # --> shows 12:30:00
do_something_for_fifteen_seconds
puts Time.now # --> shows 12:30:15; time has passed but we are still 30 minutes ahead of reality
end
而且scale
方法允许你比现实更快(或更慢)地模拟时间流逝:
Timecop.scale(60) do
puts Time.now # --> shows 12:00:00
do_something_for_fifteen_seconds
puts Time.now # --> shows 12:15:00; time has passed 60 times faster,
# so 15 seconds of real time appears as 15 minutes
end
宝石的网站有更多的信息和例子。