【问题标题】:Rails tests with various integrations各种集成的 Rails 测试
【发布时间】:2017-05-04 13:49:08
【问题描述】:
我有一个 Rails 应用程序,它与依赖于远程数据库中的外部数据的外部 api (Salesforce) 交互。我编写了一个包装器来包装这段代码,这样用户就可以直接调用get_by_id(id) 而不是编写相应的 sql 查询。
我想测试这段代码,但我不知道该怎么做。我是否应该使用 Salesforce 后端数据库进行测试,调用真正的方法?或者我应该只是模拟方法调用的结果?我一直对我应该测试的内容感到困惑......
【问题讨论】:
标签:
ruby-on-rails
api
testing
salesforce
【解决方案1】:
您应该像 Salesforce 交互套件一样编写。
测试的一个基本原则是,您的测试不应该因为外部因素而失败。但是,您的应用应该能够从 SalesForce 的错误中恢复。
来自Rails 4 Test Prescriptions
不幸的是,与第三方 Web 服务交互会引入
我们的测试非常复杂。连接到 Web 服务是
慢——甚至比我们已经尝试过的数据库连接还要慢
避免。另外,连接到网络服务需要互联网
连接...一些外部服务是公开的——我们不想在每次运行测试时都向 Twitter 发布更新,更不用说向 PayPal 发布信用卡付款了。
另外,这本书也有一些指导方针,
一个假服务器,它在测试期间拦截 HTTP 请求并
返回一个预设响应对象。我们将使用 VCR gem ...* 一个
适配器,它是位于客户端和客户端之间的对象
服务器来调解它们之间的访问。
冒烟测试,从客户端一直到真实服务器……整个交互的完整端到端测试。我们不
由于前面列出的所有原因,想要经常这样做,但它
有助于防止服务器 API 发生变化。
从客户端到假服务器的集成测试。
这测试了我们应用程序的整个端到端功能,但是
使用来自服务器的存根响应。
客户端单元测试,从客户端开始,在客户端结束
适配器。适配器的响应是存根的,这意味着适配器
甚至没有进行虚假的服务器调用。这允许我们对我们的
客户端与服务器 API 完全分离。
适配器单元测试,从适配器开始,在适配器结束
假服务器。这些测试是链条的最后一部分,允许我们
验证适配器的行为独立于任何客户端或
实际服务器
顺便说一句,我认为这本书是必须的