ruby-on-rails - 我的 Rails 应用程序外部端点的集成测试的良好做法?

标签 ruby-on-rails ruby rake integration-testing

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

您对此类集成测试有何偏好?

  • 您的单元测试和/或模拟有多深?
  • 您是否在 stub 中复制整个 SOAP 或 REST xml 响应?
  • 您是否创建“外部端点”集成测试?

更新问题:如何在运行 rake test 时排除测试目录?

最佳答案

如果您遵循 Rspec/Cucumber 人员的建议,那么集成测试级别是模拟您的数据的不合适位置,因为在某些方面,它违背了集成/验收测试的目的。但是,您必须模拟 paypal 交易之类的东西,对吗?在我目前的项目中,我面临很多这样的问题,以下是我正在实现的一些解决方案:

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

  3. 我确实认为,无论系统有多复杂,端点测试都非常重要。我真的很喜欢 Cucumber,它为我提供了 95% 的功能测试,所以我最终减少了这些测试的编写,而编写了更多的整个工作流测试。

关于ruby-on-rails - 我的 Rails 应用程序外部端点的集成测试的良好做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3556106/

相关文章:

ruby-on-rails - Ruby on Rails CSV 上传和导入 - 文件名太长

mysql - "rake aborted! uninitialized constant {My App Name}"怎么解决?

ruby - ObjectSpace - 它是什么以及人们如何使用它?

ruby - 如何将 redis 作为 rakefile 任务启动

ruby-on-rails - rake db::migrate 是如何工作的

ruby-on-rails - 获取现有的 gem,对其进行修改,然后与我自己的 Rails 应用程序一起发布

ruby-on-rails - Ruby On Rails 设计移动 API

mysql - Rails 3 MySQL 2 报告看起来有效的 SQL 语法错误

ruby-on-rails - 如何更正语法突出显示以在 Sublime/Textmate 2 中设置 Rails 链接或表单字段 "class"

ruby - 如何为外部迭代创建一个 "clone"的枚举器?