【问题标题】:How do I capture/mock outbound requests from tests written in Geb/Spock?如何从用 Geb/Spock 编写的测试中捕获/模拟出站请求?
【发布时间】:2018-03-13 05:05:20
【问题描述】:

我们有一个场景,我们在 app.local:3000 上运行我们的应用程序,并且通常在 app.local:3000/api 上调用端点。

在源代码中,请求是使用带有相对 URL /api 的 JavaScript 发出的(即 app.local:3000 不在源代码中)。

在测试期间,我们希望捕获/模拟/存根对app.local:3000/api 的所有请求,并将其指向我们称为mock.local:3000/api 的模拟服务器。

Geb 或 Spock 是否可以捕获和重新映射出站请求?

  • 我们无法更改实现代码(有 100 条不同的代码到达端点,都使用相对链接)
  • 我在 Geb 中尝试过 baseUrl,但它似乎不会改变出站请求
  • 我尝试过使用js.exec覆盖html基础标签,但是脚本执行太晚了

【问题讨论】:

  • 我很难理解这是一个 Geb 或 Spock 的问题。那么您能否分享一个MCVE(“M”表示最小)重现所描述的行为?有什么要测试的?太感谢了。顺便说一句,模拟应该可以在正常的 URI 下访问,只需替换正常的 API。那么你就不需要任何黑色的重新路由魔法了。路由器或门面不是模拟物。它更像是一种间谍。

标签: groovy spock geb


【解决方案1】:

不,不能单独使用 Spock 或 Geb 重新映射出站请求。

在我自己的测试套件中,我使用 dockerd nginx ("nginx" from official repository) 作为代理,由 testcontainers-spock 控制。

摘自 nginx 配置

location /api {
    # rewrite path
    rewrite /api /api-on-mock break;
    # proxy to the mock
    proxy_pass http://mock;
}
location @other {
    proxy_pass https://original;
}

然后我们针对代理运行所有测试。

我听说过很多关于betamax 的好东西,但我自己没有用过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多