product code
class WeatherBot
def tweet_forecast
twitter_client.update '今日は晴れです'
rescue => e
notify(e)
end
def twitter_client
Twitter::REST::Client.new
end
def notify(error)
# (エラーの通知を行う。実装は省略)
end
end
test code
it 'エラーが起きたら通知すること' do
twitter_client_mock = double('Twitter client')
# updateメソッドが呼ばれたらエラーを発生させる
allow(twitter_client_mock).to receive(:update).and_raise('エラーが発生しました')
weather_bot = WeatherBot.new
allow(weather_bot).to receive(:twitter_client).and_return(twitter_client_mock)
# notifyメソッドが呼ばれることを検証する
expect(weather_bot).to receive(:notify)
# tweet_forecastメソッドを呼び出す
# weather_botのnotifyメソッドが呼び出されたらテストはパスする
weather_bot.tweet_forecast
end
ref: https://qiita.com/jnchito/items/640f17e124ab263a54dd