【问题标题】:Webmock test for failure to connect fails before finishing test在完成测试之前连接失败的 Webmock 测试失败
【发布时间】:2021-05-27 14:45:58
【问题描述】:

我已测试连接错误:

context 'unsuccessful API request' do
  it 'responds like 500 if connection error is raised' do
    http_stub = instance_double(Net::HTTP)
    allow(Net::HTTP).to receive(:new).and_return(http_stub)
    allow(http_stub).to receive(:request).and_raise(Errno::ECONNREFUSED)

    api_client = ApiClient.new

    api_client.create_implementer('Wayfarer')

    expect(api_client.response_status).to eq(500)
    expect(api_client.response_body).to eq({ issue' => [{ 'details' => { 'text' => 'Connection error' }}]})
  end
end

当我运行它时,它会像预期的那样失败,但在方法中而不是在测试中失败,因此对失败的测试失败:

Failure/Error: response = http.request(request)
     
Errno::ECONNREFUSED:
  Connection refused

哪个是正确的错误,但在方法中失败了:

  def http_request(request, uri)
    http = Net::HTTP.new(uri.host, uri.port)

    response = http.request(request)
    @response_status = response.code.to_i

    if response_successful?
      @response_body = parsed_response(response)
    else
      @response_body = response.body rescue Errno::ECONNREFUSED
      connection_error
    end
  end

问题是它在response = http.request(request) 行的http_request 方法中间停止。它没有进行错误处理。

如果我在该行后面加上binding.pry,则无法到达,并且该方法只是保释。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-6 webmock


    【解决方案1】:

    你需要在你的规范中expect the error to be raised

     expect { api_client.create_implementer('Wayfarer') }.to raise_error(Errno::ECONNREFUSED)
    

    【讨论】:

    • 问题是它在http_request 方法的中间停止在response = http.request(request) 的行。它没有进行错误处理。
    • 即使我的答案发生了变化,它仍然会发生?
    • 确实如此。我把它放在api_client.create_implementer('Wayfarer') 之后。它应该去其他地方吗?
    • 不是之后,您需要将 api_client.create_implementer('Wayfarer') 行替换为 expect { api_client.create_implementer('Wayfarer') }.to raise_error(Errno::ECONNREFUSED) 。你永远不会捕捉到那里抛出的异常,这就是你的规范失败的原因
    • 出于好奇,您知道如何在Errno::ECONNREFUSED: Connection refused 场景中重定向吗?
    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2017-05-04
    相关资源
    最近更新 更多