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

翻动

我在 Gateway 类中得到了这段代码,它向公司内部的 API 发出请求。我如何对其进行单元测试?

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是一个法拉第请求对象,expecting是一种让方法知道它期望有效响应的状态的方法。两者都在 XGateway 继承的 BaseGateway 中定义。

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

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

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

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

基地二

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

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

您可以(虽然我不推荐这样做)解析请求 url 所在部分的 vcr 盒式磁带,并将其与您的期望相匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章