Ruby on rails Rails外部API测试

Ruby on rails Rails外部API测试,ruby-on-rails,ruby,testing,rspec,Ruby On Rails,Ruby,Testing,Rspec,我正在为我的Rails应用程序编写测试。我的应用程序与处理客户付款的外部API通信,特别是BrainTree。现在,我想确保我的应用程序与BrainTree通信的类正常工作,例如,它向BrainTree正确提交用户信息和其他参数。目标是只测试BrainTree和我的应用程序是否正常通信 需要注意的是,BrainTree有一个沙箱帐户。要测试我的班级,我应该: 使用诸如Capybara和Rspec之类的工具编写功能测试,并从用户的角度进行测试,例如用户登录、填写表单、提交付款等 编写一个只提交所

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

需要注意的是,BrainTree有一个沙箱帐户。要测试我的班级,我应该:

  • 使用诸如Capybara和Rspec之类的工具编写功能测试,并从用户的角度进行测试,例如用户登录、填写表单、提交付款等
  • 编写一个只提交所需信息并检查返回值的请求规范。这是我更喜欢的,但很棘手,因为BrainTree需要js,我不确定我可以在请求规范中使用js而不使用monkey补丁Rspec,这是我不愿意做的,因为我对Rspec和测试还是相当陌生的
  • 编写功能和请求规范
  • 编写一个完全不同的测试类型
我有一个功能测试,但仅仅测试一个外部API似乎很麻烦,因为它需要打开浏览器、填写表单等。在我的功能规范中,我宁愿将外部API存根并将API作为单元测试进行测试。请求规范似乎更有效,但js需求似乎是一个障碍


对于我在上述场景中应该做的事情,是否有最佳实践

一般来说,您通常不希望只为外部服务编写测试,而是为您自己的代码编写测试,这些代码根据您收到的响应进行测试


我发现的从外部API存根响应的最佳方法是。这将获得一个合法响应,并将其保存以供将来运行时使用。您可以偶尔擦除存储的响应,以确保功能继续。

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

谢谢您的回复。为什么通常不针对外部API进行编写?例如,我正在测试外部API,因为第三方需要根据我发送的某些选项保存某些数据。我编写此测试的主要原因是为了确保第三方正确保存数据。@Darkisa第三方是否正确保存数据不在您的控制范围内,因此测试其功能并不理想。相反,您希望测试他们给您的合同、他们的API请求/响应,并确保您相应地处理任何情况