RSpecで現在時刻に関連するテストをするときに、Rails4.1からはTimecopを使わなくても ActiveSupp
たとえば、下記のように現在時刻を返すメソッドがあるとします。
1 class Foo 2 def now 3 Time.now 4 end 5 end
正しく現在時刻を返しているかのテストは下記のように書けます。
1 travel_to Time.new(2014, 11, 24, 9, 30, 0) do 2 foo = Foo.new 3 expect(foo.now).to eq(Time.new(2014, 11, 24, 9, 30, 0)) 4 end
travel_toで現在時刻を設定しているので、expectで評価するときに決まった時間を書いて比較できます。
ですがもしnowメソッドでDateTime.n
1 class Foo 2 def now 3 DateTime.now # <- to_travelで設定した時間ではなく現在時刻が返る 4 end 5 end
その場合にはやはりTimecopを使う必要があります。Gemfileには下記のようにgemを追加。
1 group :test do 2 gem 'timecop' 3 end
テストは下記のように記述します。
1 Timecop.freeze(Time.new(2014, 11, 24, 9, 30, 0)) do 2 foo = Foo.new 3 expect(foo.now).to eq(Time.new(2014, 11, 24, 9, 30, 0)) 4 end
travel_to が対応しているのは Time.now と Date.today
travel_to(date_or_ti
rails4.1からのtravel_toをrspecで使う
posted by
akanuma
on Tue 25 Nov 2014
at 00:00