我的rails应用程序外部端点的集成测试的良好实践?

oma*_*oma 4 ruby rake integration-testing ruby-on-rails

我会保持简短,我有一个与其他应用程序通信的rails应用程序,有些使用SOAP(当然是非rails应用程序......)和其他有REST的应用程序.我正在进行集成测试,以确保我的端点包装器类具有正确的映射和设置.但是,它们默认执行,rake test这使它变得缓慢而脆弱.我希望经常进行单元测试,并且只能按需"进行集成测试".你是怎样做的?

您对此类集成测试的偏好是什么?

  • 你进行单元测试和/或模拟有多深?
  • 您是否在存根中复制整个SOAP或REST xml响应?
  • 您是否创建了"外部端点"集成测试?

更新问:如何在运行时排除test-dir rake test

Jed*_*der 5

如果按照Rspec/Cucumber人员的建议,那么集成测试级别是模拟数据的不适当的地方,因为在某些方面,它会破坏集成/验收测试的目的.但是,你必须模拟像paypal交易这样的东西,对吧?在我目前的项目中,我面临很多这样的问题,以下是我正在实施的一些解决方案:

  1. 标记在某些上下文中不起作用的测试.在我的例子中,许多服务器都在防火墙后面,所以如果我在家里而不使用vpn,我的测试就不会通过.因此,在黄瓜中我可以将它们标记为@firewall并告诉它运行未标记防火墙的测试.我很确定Rspec 2.0也支持这个功能.
  2. 模拟服务请求.是的,这可能是一个坏主意,但我不知道如何做到这一点,否则任何可预测性.我有一个单独的测试套件来确认服务正在运行,并且从我的rails应用程序,我假设它们正常工作.这方面的一个例子是LDAP.是的,在这种情况下,我倾向于使用真正的反应并做类似的事情.response = double('response') ; response.expects(:data).and_returns('my xml here')

  3. 我认为无论系统的复杂性如何,终点测试都非常重要.我真的很喜欢黄瓜,它提供了我在功能测试中需要做的95%,所以我最终编写了更少的这些测试和更多的整个工作流程测试.