おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

timecop のちょっと便利な書き方について

みなさん、 timecop 使ってますか?timecop は、テストで時間を扱う時に必須と言えるライブラリです。テスト中の時間を止めたり(Timecop.freeze)時間を移動させたり(Timecop.travel)できます。似たようなライブラリとして delorean があります。RailsCasts でも紹介されています。

さて、timecop の README には下記のようなコード例が書いてあります。

t = Time.local(2008, 9, 1, 10, 5, 0)
Timecop.travel(t)

僕はこれまで上記のように書くしか方法が無いと思っていたのですが、今日下記のようにも書けることに気づきました。

Timecop.travel(2008, 9, 1, 10, 5, 0)

また、ブロックを使うこともできます。

Timecop.travel(2008, 9, 1, 10, 5, 0) do
  Time.now #=> 2008-09-01 10:05:00 +0900
end
Time.now #=> 2013-01-15 22:08:12 +0900

ちょっぴり便利ですね。ちなみにTimecop.freezeも同様に使えます。rdoc をちゃんと読めば書いてある話なのですが、README 読むだけで普通に使うには十分なのでみんなきっとなかなか気づけないはず…。