1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rspec モック

Last updated at Posted at 2019-09-20

はじめに

晴れてエンジニアになりテストを書き始めたところで、初めて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

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?