Rspec收到来自已测试应用程序的帖子

时间:2019-02-12 23:07:17

标签: ruby-on-rails rspec integration-testing

我正在使用rspec / capybara测试正在运行的应用程序。我有一条要测试的路由,应该通过提供的网址与辅助服务进行通话。

由于测试未封装应用程序,因此它们只是与之通信,因此我无法使用取消api调用的常规方法来确保其正确调用服务。

我想要的是能够给路由提供一个URL,然后让rspec从应用程序接收回信。有办法吗?

要清楚,我不希望rspec模拟/存根请求,因为它没有作为应用程序的包装程序运行。

1 个答案:

答案 0 :(得分:0)

我想辅助服务的响应会以某种方式暴露给您。

因此,点击https://not-my-service.com?secondary-service=http://service-i-control.com会得到包含http://service-i-control.com的响应(部分或完整)的内容。

如果此服务已在生产环境中启动并运行,则您的secondary-service也必须是Internet公开的,您可以考虑使用ngrok之类的东西来公开您的测试环境正在加速的本地Rack应用程序返回特定的响应。

如果您不介意使用外部服务,也可以考虑使用httpbin.org,例如:https://not-my-service.com?secondary-service=https://httpbin.org/ip,您将返回200 OK,其中包含击中服务器的源IP。因此,您可以将该IP与https://not-my-service.com匹配。

如果除了调用secondary-service之外没有其他信息,那么我建议您将其作为规范的一部分:

  1. 启动一个机架应用程序并将其公开给互联网。
  2. 点击服务,将本地应用程序作为参数传递。
  3. 等待直到收到期望的请求,然后停止应用程序并且测试成功。
  4. 或者,它超时(例如30秒),并且测试失败(从未调用过服务)。