[Rails] RSpecのモックとスタブの使い方

こんにちは、hachi8833です。 なかなかRSpecをうまく書けずに悩んでましたが、morimorihogeさんに教えてもらって、RSpecのモックとスタブの使い分け方が少し見えてきたのでメモします。 スタブの目的 そもそもスタブを使用する目的は、本当にテストしたいところだけをテストできるように、本筋に関係ない部分(バリデーションなど)をとにかく動くようにする、動かしたい場所まで辿り着くことです。例えて言うなら、ペンキを塗ったりエアブラシを使うときに、塗料が付いて欲しくない部分に貼るマスキングテープをイメージするとよいでしょう。テストしたい箇所以外はスタブで塞いでしまうわけです(以下の4行目)。 #vtypes_controller_spec describe “POST create” do it “create_from_text が呼ばれ,client_vtypes_path を再表示すること” do Vtype.stub(:type_string).and_return(10) # ここがスタブ post :create, text:”data_text”, vtype:”10″ # テストしたいアクション response.should redirect_to(client_vtypes_path(filtered_vtype:”10″)) # アクションの結果をテスト end end 上の4行目では、下のモデルにあるtype_stringメソッドを偽って、type_stringが10という値を返したということにしてくれています。 以下はVtypeモデルです。 # Vtypeモデル # name:: 種別 – 日本語 (string),null 不可 # sort_order:: 並び順カラム (integer),null 不可 class Vtype < ActiveRecord::Base def self.type_string(num) return self.find_by_sort_order(num).name end end … Continue reading [Rails] RSpecのモックとスタブの使い方