環境
- rails6.0系
- rspec3系
初めに
※サンプルコードになります
travel_toメソッドで時刻を変更した中で実施したテストがありました。
その中で、定数の内部で現在時刻から30日前を取得する処理があったのですが、travel_toの影響を受けず、テスト実行時の時刻を元に取得している問題が発生しました。
before { travel_to('2023-06-20 18:00:00') }
class User
TEST_DATE = Time.current.ago(30.days).strftime('%Y-%m-%d') # テストの中で呼ぶとtravel_toの影響を受けず実行時の現在時刻から算出された
end
解決策
テスト実行前に、呼び出している定数をstub_const
で書き換えてあげると上手くいきます
stub_const('User::TEST_DATE', Time.current.ago(30.days).strftime('%Y-%m-%d'))
expect xx # 実行する際は上記のスタブの値が参照されるようになる
参考文献