【问题标题】:Rspec receive post from tested applicationRspec 从测试的应用程序接收帖子
【发布时间】:2019-02-12 23:07:17
【问题描述】:

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

由于测试不封装应用程序,它们只是与应用程序对话,我不能使用常规方法来存根 api 调用,以确保其正确调用服务。

我想要的是能够给路由一个 url,然后让 rspec 接收来自应用程序的回帖。有没有办法做到这一点?

明确地说,我不希望 rspec 模拟/存根请求,因为它不是作为应用程序的包装器运行的。

【问题讨论】:

  • 您能否展示您的应用如何与辅助服务进行交互? “他们只是和它说话”真的很模糊。我不知道“这不是作为应用程序的包装器运行”是什么意思。请显示一些代码并在描述上更准确。

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


【解决方案1】:

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

所以点击https://not-my-service.com?secondary-service=http://service-i-control.com 会导致包含来自http://service-i-control.com 的响应(部分或完整)。

如果此服务已启动并在生产环境中运行,您的 secondary-service 也必须暴露在互联网上,您可以考虑使用 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. 启动机架应用程序并将其公开到 Internet。
  2. 点击将本地应用程序作为参数传递的服务。
  3. 等到您收到预期的请求,然后停止应用程序,测试成功。
  4. 或者超时(比如 30 秒)并且您的测试失败(从未调用过服务)。

【讨论】:

    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2018-02-21
    相关资源
    最近更新 更多