目的
特定の時間になるかを確認するためにspecを書きたい
どのように書けば良いか分からず調べた
travel_toとは
ActiveSupport :: Testing :: TimeHelpers
のメソッドの一つです。
変更したい日時を渡すと、Time.now、Date.today、DateTime.nowで返される
日時を変更することができます。
コードイメージ
spec/models/○○○_spec.rb
Spec.describe Task, type: :model do
it 'is whether now time' do
travel_to('2019-05-26 23:00'.to_time) do
expect(Time.zone.now).to eq(Time.new(2019, 5, 26, 23, 0, 0))
end
after do
travel_back
end
end
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
Rails 5.2系から下記の記載は必要なくなったようです。
情報ありがとうございます!
時間を止めてしまうとそれ以降のspecの時間も止まってしまうため、
下記の記述が必要になります。
after do
travel_back
end
参考URL
https://qiita.com/mightysosuke/items/72f764fc237422b423b0
https://fuqda.hatenablog.com/entry/2019/03/04/223012