RSpec3でTime.nowをスタブ化(stub)

スポンサーリンク

Rails プロジェクトで RSpec 3 でテストコードを書いていて、stub 作成の書き方が RSpec 2 から変わっていました。実装側のコードで使ってある Time.now を RSpec テストコード内でスタブ化したかった。

— 環境 —
Rails 4.1
rspec-rails 3.1.0

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

RSpec 3 では allow を使って stub 化する

以下のように RSpec テストコードでは、before の中で allow を使ってスタブを作成します。実装側で Time.now が月末日かどうかで判定するコードが書いてあり、それをテストする場合の例です。Time.now が当月の月末日時を返すようにスタブを作りました。

receive_message_chain を使った書き方では、以下のようにメソッドチェインとしても書けるそうです。

メソッドチェインを使わない場合は、以下のようにも書けるらしい。

RSpec は基本的に好きなのですけど、バージョンアップでインターフェースが変わりまくるのはちょっと勘弁して欲しい…ですね。RSpec 2 でのスタブの使い方は以下。

RSpec でスタブの使い方 | EasyRamble

スポンサーリンク
私は Rails のテストフレームワークには RSpec を使っています。サーバーのテスト用に Serverspec もおすすめです。
 
スポンサーリンク
  • 2件のコメント
  • passol

    日付系のテストを行う場合は、Timecopがおすすめです。

    https://github.com/travisjeffery/timecop

    • taka

      passol さん、こんにちは。便利な gem を教えて頂きありがとうございます!

Leave Your Message!