コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Railsの5.2系からブロックなしのtravel_toに対してtravel_backを明示的に書かなくてもよくなった

travel_backってどこで使うんだ…?と使い所に関して挙動を確認してたらたどり着いたメモ。

環境

$ bin/rails -v
Rails 5.2.2

理由と解説

travel_back というリアル時刻に戻す機能があるのだが、一昔の前のブログをさがすと「ブロックなしの travel_to をしたら必ずやってね!」という文章がたくさんでてくる

しかし5.2系にてこれを修正するPRが出され、マージされている

TimeHelpers moduleでafter_teardownメソッドを定義し、テスト終了時に自動でtravel_backを呼び出すよう修正しています。 これにより、block無しのtravelやtravel_toを使用した場合に、明示的にtravel_backを呼ぶ必要は無くなります。 Remove automatic removal of Date/Time stubs after each test caseで一度同様の対応が削除された事があったのですが、自動でtravel_backした方が便利だろう、という事で再度入ったようです。 - rails commit log流し読み(2017/07/24) - なるようになるブログ

そのため、いままでは

context "travel_test" do
  before do
    travel_to( "2018-10-10 10:00:00".in_time_zone )
  end

  it "ためしに時刻表示" do
    pp Time.zone.now
  end

  after do
    travel_back
  end
end

とかく必要があったが、afterが不要になり

context "travel_test" do
  before do
    travel_to( "2018-10-10 10:00:00".in_time_zone )
  end

  it "ためしに時刻表示" do
    pp Time.zone.now
  end
end

だけでよくなった

参考リンク