0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

最近、rspecでtravel_toを使いテストを書きました。
使ってみて便利だなと思ったので共有します。

travel_toとは

ActiveSupport::Testing::TimeHelpersのtravel_toメソッドです。

travel_toはある時刻を渡してあげれば、その時刻についてのテストを実装することができます。
実際にやってみたいと思います。

travel_toのテスト例

travel.rbというmodelでcurrent_yearというメソッドを定義します。
これは単純に現在の時刻の年を返すメソッドです。

app>models>travel.rb
class Travel < ApplicationRecord
  def self.current_year
    Time.zone.today.year
  end
end

rails_helper.rbでTimeHelpersをincludeします。

spec>rails_helper.rb
RSpec.configure do |config|
  config.include ActiveSupport::Testing::TimeHelpers
end

travel_spec.rbで以下のテストを作成します。

spec>models>travel_spec.rb
require 'rails_helper'

RSpec.describe Travel, type: :model do
  describe 'current_year' do
    it '2023が返る' do
      travel_to('2023/07/03 00:00'.in_time_zone) do
        expect(described_class.current_year).to eq(2023)
      end
    end
    it '2022が返る' do
      travel_to('2022/07/03 00:00'.in_time_zone) do
        expect(described_class.current_year).to eq(2022)
      end
    end
  end
end

上を実行すると、テストが通ります。
つまり、travel_to('2023/07/03 00:00'.in_time_zone)で現在時刻が'2023/07/03 00:00'となり、現在の年が2023となります。2022年の場合も同様です。

終わりに

便利なメソッドなので、使えるときは使っていきたいと思います。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?