はじめに
最近、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年の場合も同様です。
終わりに
便利なメソッドなので、使えるときは使っていきたいと思います。