Restoing a Net::HTTP timeout & Testing with Rspec



给定以下服务对象:

class GetJSON
   def self.call(source)
    uri = URI.parse(source)
    res = Net::HTTP.get_response(uri)
    return unless res.is_a?(Net::HTTPSuccess)
    JSON.parse(res.body)
  end
end

Net::HTTP.get_response(uri)需要很长时间才能响应时,我得到一些错误。如果发生这种情况,我希望该方法返回nil。

  1. 下面看起来可以吗?

    class GetJSON
      def self.call(source)
      uri = URI.parse(source)
      begin
       res = Net::HTTP.get_response(uri)
      rescue Net::ReadTimeout
       return
      end
      return unless res.is_a?(Net::HTTPSuccess)
      JSON.parse(res.body)
     end
    end
    
  2. 我如何为此编写RSPEC测试?(即如何复制超时?)

您可以存根get_response方法并使其引发错误:

allow(Net::HTTP).to_receive(:get_response).and_raise(Net::ReadTimeout)

在RSpec文档中有更详细的描述

最新更新