概要
ReadMeに、
A gem providing "time travel" and "time freezing" capabilities, making it dead simple to test time-dependent code. It provides a unified method to mock Time.now, Date.today, and DateTime.now in a single call.
とあるように、時間を止めたり、時間を進めたりすることができるライブラリ。
中の動きとしてはTIme.now
とか、Date.today
とかを指定した日時でモックしたり、時間のを進まないようにしてくれる。
Github
使い方
時間を止める
now = Time.Now # => 2014-01-26 14:18:46 +0900 # 時間を止める Timecop.freeze(now) p Time.now # => 2014-01-26 14:18:46 +0900
時間を特定に日時に変更する
t = Time.local(2012, 1, 1, 0, 0, 0) # 現在時刻をtに変更する Timecop.travel(t) sleep(1) p Time.now # => 2012-01-01 00:00:01 +0900
1秒で進む秒数を変更する
# scaleを10secに変更する Timecop.scale(10) 5.times.each do p Time.now sleep(1) end # => 2014-01-26 14:13:10 +0900 # => 2014-01-26 14:13:20 +0900 # => 2014-01-26 14:13:30 +0900 # => 2014-01-26 14:13:40 +0900 # => 2014-01-26 14:13:50 +0900
do ~ end
で括るか、Timecop.return
を呼ぶとこれらは解除される模様。