はじめに
日付関係のテストをしていたときに、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には他にもメソッドがあるので参考にしてみてください!