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