法拉第的Rspec :: ConnectionFailed

时间:2018-03-22 05:25:10

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

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

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

我也读过有关gem Webmock但是有没有办法不使用任何额外的宝石

1 个答案:

答案 0 :(得分:0)

由于隐私,您无法发布您的真实代码,因此需要提供一般性建议。

我们假设你有这段代码:

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