RSpec でスタブの使い方

スポンサーリンク

RSpec でスタブ機能を使う際の備忘録。メソッドがまだ未実装ではあるがテスト内で何らかの値を返す必要がある場合や、何かしらの事情でテスト内でメソッドから正常な値を返すことができない場合などに、スタブを使うとテスト内でメソッドが特定の戻り値を返すように設定できます。

【追記 2015/07/21】
RSpec 3 でのスタブ作成については以下をどうぞ。
RSpec3でTime.nowをスタブ化(stub) | EasyRamble
【追記ここまで】

— 環境 —
RSpec 2

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

RSpec でのスタブの書き方

「オブジェクト#メソッド」が特定のある「戻り値」を返すように設定したい場合、以下のように書く。

例を見ます。Greeting モデル・コントローラーの Request Spec での例です。

spec/requests/greeting_pages_spec.rb

Greeting.get_greetings クラスメソッド、および User#say_hello インスタンスメソッドに対してスタブを使う例です。これらのメソッドが実際にはまだ未実装であっても、テスト内ではそれぞれ特定の戻り値を返すように設定しているので、テストを実行できます。

Greeting.get_greetings クラスメソッドは、@greetings 配列を返します。また、User#say_hello インスタンスメソッドは”hello”を返します。SomeObject.stub(:method).and_return(value) というなんとも直感的で分かりやすい表現です。さすが RSpec。

これで、describe “index” 内のテストでは、Greeting.get_greetings クラスメソッドおよび User#say_greeting インスタンスメソッドを普通に利用できます。簡単で便利です。

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

Leave Your Message!