実現したいこと
Railsのtasksで外部APIからエラーレスポンスを取得した場合の例外キャッチのテストを、スタブを使用してRSpecで行いたいです。
ググてみるとモデルに対してスタブを設定してRSpecテストを行なっている記事はヒットするのですが、tasksのテストについては見つからなかったので、ここで質問させていただきました。
実行環境
- ruby 2.3.0
- rails 4.2
- rspec 3.4.4
tasksのコード
lib/tasks/hoge/fuga.rb
namespace :hoge do desc 'APIにリクエストを送る' task request_api: :environment do begin # ApiRequestClassからエラーレスポンスを返却してGetErrorResponseExceptionをraiseしたい response = ApiRequest.new.execute raise ApiException::GetErrorResponseException, response.error_message if response.has_error? logger.info(response.message) rescue => e logger.error("Exception message: #{e.message}") logger.error("Exception backtrace: #{e.backtrace}") end end end
api_request.rb
class ApiRequest require 'httpclient' def execute client = HTTPClient.new client.post('hoge_url', header: 'hoge_header', body: 'hoge_body') end end
ApiRequestクラスでは外部APIからSOAPでXML形式でレスポンスを取得しています。記載はしていませんが、ApiRequestクラスではXMLのパースを行い、taskに渡しています。
上記のresponse = ApiRequestClass.new.executeの箇所のスタブに置き換えて、例外処理のテストを行う方法などございましたらご教示のほどよろしくお願いいたします。
情報の不足などございましたら、お手数ですがご指摘ください。
あなたの回答
tips
プレビュー