はじめに
日付関係のテストをしていたときに、travel_to
を使うといいと教えてもらいました。
今回は、travel_to
メソッドについてまとめていきます。
travel_toとは
ActiveSupport :: Testing :: TimeHelpers
のメソッドの一つです。
変更したい日時を渡すと、Time.now
、Date.today
、DateTime.now
で返される日時を変更することができます。
コード例
travel_to do
とend
で囲まれた部分の中だけ、時間が変更されています。
コメント文のとおりに出力されました。
it 'puts date and time' do
travel_to Time.zone.local(2020, 03, 16) do
pp Date.today # -> Mon, 16 Mar 2020
pp Time.now # -> 2020-03-15 15:00:00 +0000
pp DateTime.now # -> Mon, 16 Mar 2020 00:00:00 +0900
end
end
SyntaxError
Time.zone.local
に08
または09
を渡すと、Invalid octal digit
でエラーとなります。
そういうときは、下の例のように0
をつけずに渡してあげればOKです。
travel_to Time.zone.local(2020, 8, 16) do
end
参考
ActiveSupport::Testing::TimeHelpers
ActiveSupport :: Testing :: TimeHelpers
には他にもメソッドがあるので参考にしてみてください!