rspecでモックする

社内のrailsサービスの中で、社内オリジナルgem経由で別サービスのデータを取得してくる場所がありました

#hoge_controller.rb

user = User.first

name = other_service_data.name

other_service_dataは別サービスから取得しています

rspecを実行するとこの部分で落ちていました

まあそうですよね

rspecの中で別サービスへの通信はできませんね

やり方を調べていくと下のような書き方で別サービスのデータをモックすることができました

...
#hoge_controller_spec.rb

let(:other_service_data) do
    other_service_data = double('other_service_data')
    allow(other_service_data).to receive(:name).and_return("taro")
    other_service_data
end

...

before do
    allow(controller).to receive(:other_service_data) { other_service_data }
end

これでcontrollerのなかでother_service_dataが呼ばれた場合にはletでモックした:other_service_dataをしてくれます

そしてother_service_data.nameはtaroという値を返します

読む方からするとなかなかわかりやすいですね

rspecはノリで書いてるからどっかで一回きちんと勉強しないと、、、