如何测试(使用RSpec)在Rails中发送HTTP请求(作为单元测试的一部分)?

时间:2017-04-19 08:19:05

标签: ruby-on-rails unit-testing rspec rspec-rails

我在Gateway类中有这个代码,它向公司内部API发出请求。我如何对它进行单元测试?

1

class XGateway < BaseGateway self.target_url = ENV["X_URL"] def activate(serial_number:, comment: nil) expecting 204 do connection.put do |req| req.url "/api/v1/hw/#{serial_number}/activate" req.params = { comment: comment } end end end def deactivate(serial_number:, comment: nil) expecting 204 do connection.put do |req| req.url "/api/v1/hw/#{serial_number}/deactivate" req.params = { comment: comment } end end end end 是法拉第请求对象,connection是让方法知道有效响应所需状态的方法。两者都在XGateway继承的BaseGateway中定义。

现在我需要在这里测试什么(在单元测试的范围内?)

据我了解,对于每种方法:

  • 使用正确的参数
  • 测试是否发送了HTTP请求
  • 在满足期望时测试正确的行为(响应具有状态代码204)
  • 在未满足预期时测试正确的行为(响应的状态代码不同于204)

但是,如何测试已发送http请求?

1 个答案:

答案 0 :(得分:1)

通常我使用VCR来测试请求和响应。有了这个,您可以记录代码中的请求和响应。 VCR的主要目的是加速您的测试套件,使其更加强大,以防止第三方系统的变化。

在您的情况下,您可以设置单元测试,将params传递给activatedeactivate方法,并针对您期望从输入中得到的响应进行测试。

您可以(虽然我不建议这样做)解析请求网址所在部分的录像带,并将其与您的期望相匹配。