はじめに
個人用のメモです。
Railsチュートリアルを完走し、現在、Everyday Rails - RSpecによるRailsテスト入門を用いてRSpecの勉強を進めていたところ、10章にて「モックとスタブ」というものが出てきました。
初見ではあまり理解できなかったため、それぞれの定義や文法などの基本をさらうべくまとめてみました。
モックとスタブの定義・特徴・文法
モック
- テスト用の影武者として働くオブジェクト。
- データベースへのアクセスなしで生成される(=テストの時短に繋がる)。
-
double
を用いて影武者を生成
スタブ
- テスト用のダミーメソッド。
- データベースやネットワークを使うメソッドをデータベースへのアクセスなしで呼び出す。
-
allow(モデル名).to メソッド
を用いてダミーメソッドを作成
使用例
- 以下の例では
user = double("user", name: "Fake User")
のようにdouble
を用いてモック(=影武者ユーザー)を生成している。 -
allow(note).to receive(:user).and_return(user)
はNoteモデルに#userメソッドがある場合に、欲しい結果(user)を返すという処理 - このようにモックとスタブの使用によって、ユーザーを永続化しない、且つ、データベース上でのユーザー検索をしないテストが記述できるようになる
spec/models/note_spec.rb
it "delegates name to the user who created it" do
user = double("user", name: "Fake User")
note = Note.new
allow(note).to receive(:user).and_return(user)
expect(note.user_name).to eq "Fake User"
end
※ Everyday Rails - RSpecによるRailsテスト入門の10章・モックとスタブの項にて出てきたコードを例としてお借りしています。
まとめ
- モック・スタブによってデータベースにアクセスせずにオブジェクトやメソッドを使用できる。
- テストが早くなるというメリットがある。
-
double
でモックを生成、allow(モデル名).to メソッド
でスタブを作成する。