【问题标题】:Rspec for Faraday::ConnectionFailedFaraday::ConnectionFailed 的 Rspec
【发布时间】:2018-03-22 05:25:09
【问题描述】:

我在需要编写规范的代码中有以下方法(用于救援块)。我尝试了几件事但没有成功,因此我的规范将进入救援块。我读过关于使用 Stubs 但不知道如何在这种情况下使用它

 def start
    some code
  rescue Faraday::ConnectionFailed, Faraday::TimeoutError, Faraday::SSLError => e
    message 'CONNECTION FAILED'
  end

我还阅读了有关 gem Webmock 的信息,但有什么方法可以在不使用任何额外 gem 的情况下做到这一点

【问题讨论】:

  • 表明 some code - 你需要存根它的一些东西来引发 Faraday::Error 类
  • 如果未检测到 Internet 连接并且 some code 由于代码隐私问题我无法共享,则会引发错误

标签: ruby-on-rails ruby ruby-on-rails-3 rspec faraday


【解决方案1】:

由于隐私原因,您无法发布您的真实代码,因此有一个一般性建议。

假设你有这个代码:

def start
  SomeClass.some_method(some_params)
rescue Faraday::ConnectionFailed, Faraday::TimeoutError, Faraday::SSLError => e
  message 'CONNECTION FAILED'
end

要测试是否引发了消息,您可以执行以下操作:

it 'returns "CONNECTION FAILED" message' do
  allow(SomeClass).to receive(:request_api) { raise(Faraday::ConnectionFailed) }
  # now you call `start` method and check what you want
end

所以你只想用你的方法中存在的真实类和方法替换allow(SomeClass).to receive(:some_method)

使用 WebMock

使用 WebMock 可以通过多种方式实现。最简短的是:

it 'returns "CONNECTION FAILED" message' do
  WebMock.disable_net_connect!
  # call `start` and test your rescue block
  WebMock.allow_net_connect!
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-29
    • 2023-03-28
    • 2018-10-25
    • 2016-02-07
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多