Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

はじめに

個人用のメモです。

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
14
Help us understand the problem. What are the problem?