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はノリで書いてるからどっかで一回きちんと勉強しないと、、、