LoginSignup
4
2

More than 3 years have passed since last update.

Rails内の時刻を一時的に変更する方法

Posted at

概要

  • 自分達のテストデータ作成用に制作フローを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
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2