提供者未注册交互

Provider Not Registering Interaction

我正在使用 Pact Go implementation 来尝试合同测试。我做了一个无法正常工作的提供商测试,因为我需要模拟我的服务对 Twilio 的请求。

我为我的消费者和该提供者之间的合同创建了一个 Pact 对象,然后为我的提供者和 Twilio 之间的合同创建了另一个名为 twilioPact 的对象。我已将 POST 的交互添加到 Twilio 端点,但在 pact.log 中我没有看到它已注册。我的测试正确发出了请求,但没有为它注册交互,所以我从模拟服务器收到 500 错误。

有没有人有将 Pact 与 'provider' 同时也是 'consumer' 一起使用的经验?

编辑:在与 Matt Fellows 交谈后,我被告知我使用 Pact 不正确,不应该在 运行 进行提供商验证时尝试 运行 模拟服务。我也曾怀疑过,但我看到的 none 个示例是针对具有依赖性的提供程序的。通过编写消费者测试并将生成的 pact 文件传递​​给 pact-stub-service 以充当 Twilio 的模拟,我能够让我的提供者验证工作。

这里有几点需要考虑:

  1. 最好在您的 client <-> Twilio AdapterTwilio Adapter <-> Twilio 之间进行两个单独的合同测试。做你正在做的事情是可能的,但它会使测试更复杂并且可能更难read/comprehend。单独测试它们可以让您有更多的控制权。
  2. 在进行之前的合同测试时,而不是为您的 Twilio 适配器的(提供者)依赖项 (Twilio) 菊花链式连接另一个合同模拟服务,您最好使用标准 mock/stub 工具来完成这项工作 - 任一代码基于 mocks/doubles、服务替身(例如 Mountebank)或 Pact [1] 附带的存根服务器。不要忘记您将通过其他合同测试来验证这些假设,因此您可以安全地进行此操作。
  3. 可能是因为您有两个模拟服务器 运行(一个模拟 Twilio 适配器,另一个模拟 Twilio),您的请求被发送到 相同的 模拟服务,搞得一团糟

[1] 这是 pact-go 附带的二进制文件等列表:

    tree -L 3 /path/to/pact-go

    .
    ├── pact
    │   ├── README.md
    │   ├── bin
    │   │   ├── pact-broker
    │   │   ├── pact-mock-service
    │   │   ├── pact-provider-verifier
    │   │   ├── pact-publish
    │   │   └── pact-stub-service
    │   └── lib
    │       ├── app
    │       ├── ruby
    │       └── vendor
    └── pact-go