日時をテストするときは、travel_toメソッドを使うと良い
モデルテストで日時をテストするときに、以下のように今日作成されたものかどうかを確認するテストを作成していた。
report = Report.create(title: 'test_title', content: 'test_content') assert_match Time.zone.today.to_s, report.created_at.to_date.to_s
ただ、これだとReport.create
が実施された時間が23:59:59.999
で、assert_match
でテストした時間が24:00:00.000
とかになると、日を跨いでしまい、エラーになる可能性がある。
そこで、travel_to
を使うと、日時を固定できるので便利だった。
travel_to(Date.new(2022, 1, 1)) do report = Report.create(title: 'test_title', content: 'test_content') # <=2022/01/01で固定される assert_equal Date.new(2022, 1, 1).to_s, report.created_at.to_date.to_s end
travel_to do ~ end の中でreportを作成して、assertionで結果を確認すれば、いつテストを行っても、日が固定されているので、日を跨いだらテストにならないといったことは心配なくなる。
【参考】