抢救Net :: HTTP超时&使用Rspec进行测试

时间:2015-10-02 17:12:23

标签: ruby-on-rails exception 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测试? (即如何复制超时?)

1 个答案:

答案 0 :(得分:1)

您可以存根get_response方法并导致它引发错误:

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

RSpec docs

中有更详细的描述