LoginSignup
25
18

More than 5 years have passed since last update.

【Ruby on Rails】RSpecにおけるモックとスタブの基本事項メモ【プログラミング学習開始142日目】

Last updated at Posted at 2019-01-15

はじめに

個人用のメモです。

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 メソッドでスタブを作成する。

参考書籍・URL

25
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
18