【问题标题】:Rails External API TestingRails 外部 API 测试
【发布时间】:2018-03-09 19:17:33
【问题描述】:

我正在为我的 Rails 应用程序编写测试。我的应用程序与处理客户付款的外部 API 通信,特别是 BrainTree。现在,我想确保与 BrainTree 通信的应用程序类正常工作,例如它正确地向 BrainTree 提交用户信息和其他参数。目标是只测试 BrainTree 和我的应用程序是否正常通信。

需要注意的一点是,BrainTree 有一个沙盒帐户。要测试我的课程,我应该:

  • 使用 Capybara 和 Rspec 之类的东西编写功能测试,并从用户的角度进行测试,例如用户登录、填写表格、提交付款等。
  • 编写仅提交所需信息并检查返回值的请求规范。这是我更喜欢的,但很棘手,因为 BrainTree 需要 js,而且我不确定我是否可以在请求规范中包含 js 而无需猴子修补 Rspec,我宁愿不这样做,因为我对 Rspec 和测试还很陌生一般来说。
  • 编写功能和请求规范
  • 编写完全不同类型的测试

我有一个功能测试,但仅用于测试外部 API 似乎很麻烦,因为它需要打开浏览器、填写表单等。在我的功能规范中,我宁愿存根外部 API 和将 API 作为单元测试进行测试。请求规范似乎更有效,但 js 要求似乎是一个障碍。

对于我在上面的场景中应该做什么,是否有最佳实践?

【问题讨论】:

    标签: ruby-on-rails ruby testing rspec


    【解决方案1】:

    一般来说,您通常不想只为外部服务编写测试,而是为您自己的代码编写测试您收到的响应的代码。

    我发现存根来自外部 API 的响应的最佳方法是 VCR gem。这将获得合法响应并将其保存以供将来运行。您可以偶尔擦除存储的响应以确保继续正常运行。

    【讨论】:

    • 感谢您的回复。为什么通常不针对外部 API 编写代码?例如,我正在测试外部 API,因为第 3 方需要根据我发送的某些选项保存某些数据。我编写测试的主要原因是确保第 3 方正确保存数据。
    • @Darkisa 第 3 方是否正确保存数据超出了您的控制范围,因此您不适合测试其功能。相反,您想测试他们给您的合同、他们的 API 请求/响应,并确保您相应地处理任何情况
    【解决方案2】:

    另一种测试方法是使用模仿 API 的虚假服务。 Fake Braintree Gem 提供了这样的功能,我已经将它与 VCR 混合用于其他测试,以确保正确的功能。还有很多其他方法,但您可以测试一下哪种方法适合您的需求

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 2015-03-20
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多