モックを使ってAPIをテスト
product code
# 注:本当に動かす場合はtwitter gemが必要です
require 'twitter'
class WeatherBot
def tweet_forecast
twitter_client.update '今日は晴れです'
end
def twitter_client
Twitter::REST::Client.new
end
end
test code
it 'エラーなく予報をツイートすること' do
# Twitter clientのモックを作る
twitter_client_mock = double('Twitter client')
# モックがupdateメソッドが呼びだせるようにする
allow(twitter_client_mock).to receive(:update)
# expectにすることでメソッド呼び出しの検証も一緒にできる
expect(twitter_client_mock).to receive(:update)
# インスタンス化しただけではAPI通信は発生しないので許容
weather_bot = WeatherBot.new
# twitter_clientメソッド(API通信を行うメソッド)が呼ばれたら上で作ったモックを返すように実装を書き換える
allow(weather_bot).to receive(:twitter_client).and_return(twitter_client_mock)
expect{ weather_bot.tweet_forecast }.not_to raise_error
end
疑問
モックを作ってメソッドも偽装できたのはわかったけど、インスタンスの内容はどうなってる?