Help us understand the problem. What is going on with this article?

Rspec モック

はじめに

晴れてエンジニアになりテストを書き始めたところで、初めてRspecのモックというものを使用したので忘れないように個人メモとして残す

概要

  • モックとは
  • モックオブジェクトを作成する
  • オブジェクトの返り値を設定する
  • 設定したメソッドを使用してテストを実行する

Rspecのモックとは

簡単にいえばダミーのオブジェクト

本物のデータベースにアクセスできない、もしくはアクセスしたくない時に使うことができる
今回の場合、外部APIを叩いて情報を取得する必要があったためダミーのオブジェクトを作成してテストを書いた

モックオブジェクトを作成する

double

例)ダミーユーザーを作成する

user = double('User', name: 'もっくん')
p user
#=>#<Double "User">
p user.name
#=>"もっくん"
  • doubleというメソッドを使用してUserというダミークラス(テストダブル)を作成します。
  • userというダミーオブジェクトを作成します。
  • p user でdoubleに渡した引数 'User' を取得できます
  • nameというメソッドを使用して'もっくん'という名前を取得できます

オブジェクトの返り値を設定する

allow

allow(user).to receive(:name).and_return "もっちゃん"
allow(user).to receive(:age).and_return "7さい"

allow(作成したオブジェクト).to receive(置き換えたいメソッド名).and_return(希望する返り値)

  • and_returnでメソッドを使用した時の希望する返り値を設定することができます
  • nameメソッドを使用すると"もっちゃん"が返り値になるように設定します
  • ageメソッドを使用すると"7さい"が返り値になるように設定します

設定したメソッドを使用してテストを実行する

    describe "Rspec mock test" do
      user = double("User", name: "もっくん")
      p user
      p user.name
      allow(user).to receive(:name).and_return "もっちゃん"
      allow(user).to receive(:age).and_return "7才"
      p user.name
      p user.age
    end
 #=>#<Double "User">
 #=>"もっくん"
 #=>"もっちゃん"
 #=>"7さい"

参考にした記事

https://qiita.com/sesame/items/8d4419da0afde3bb845f
https://qiita.com/fuku_tech/items/261e958b35ab809213da

Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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