概要
- 自分達のテストデータ作成用に制作フローを1発で全て実行する専用ページを作成することになった
- バリデーションなどを正常に通すため(今日以前の日付を設定するとエラーになる)、また本番と同じフローを辿るために(バッチの実行曜日が決まっている)、任意のタイミングで時刻を変更したい
- timecopを使えば任意のタイミングで任意の日時にサーバの時刻を変更できた
環境
- ubuntu - 16.04.4 LTS
- rails - 5.0.7.2
- timecop - 0.9.1
方法
※注意:gemの導入、専用ページへのルーティングは開発環境に限定して実行し、上手くいったものであり、もしこの記事の内容を実行して何かあっても責任は負わない。あしからず。
timecopのgithub
https://github.com/travisjeffery/timecop
timecopを導入後、Timecop.travel(t)
でt
の日時にサーバー時刻を設定でき、Timecop.return
で元の時刻に戻せたので今回はそれを使った。
test_controller.rb
# 例
def create
Timecop.travel(t) # 時刻をtに変更
# ここでバッチやら処理を実行(この中でさらにTimecop.travelを使っても問題はない)
Timecop.return # 時刻元に戻す
end