RSpec でスタブの使い方

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

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

— 環境 —
RSpec 2

スポンサーリンク

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 もおすすめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!