Java 消费者和 Java 脚本提供者的合同测试

Contract test for a Java consumer and JavaScript provider

我们有 2 项服务,其中一项是另一项的消费者。消费者用Java编写,提供者用Java脚本编写。

在消费者方面,我们使用 pact-jvm 定义了消费者合同测试,我们能够生成合同。在本合同中,响应定义如下:

"response": {
  "status": 200,
  "headers": {
    "Content-Type": "application/json"
  },
  "body": [
    "test"
  ]
},

在我们的供应商上,我们现在正尝试使用 pact-js 定义供应商合同测试,但我们遇到了一个问题,在 pact-js 中我们使用 MessageProviderPact 来验证合同。但是当 运行 测试时,正文应该在这样的内容属性中:

Key: - is expected 
            + is actual 
       Matching keys and values are not shown

       -[
       -  "test"
       -]
       +{
       +  "contents": {
       +    "statusCode": 200,
       +    "body": "[test]"
       +  }
       +}

用于契约验证的代码

const p = new MessageProviderPact({
        messageProviders: {
            '': handler
        },
        provider: 'provider-service',
        pactUrls: [
            path.resolve(
                process.cwd(),
                'pacts',
                'consumer-service-provider-service.json'
            )
        ]
    });

知道如何解决这个问题吗?是否可以在消费者端使用带有内容键的类似消息结构?或者我们可以在提供商方面以任何其他方式解决它

MessageProviderPact 用于消息队列类型的交互,而不是 HTTP 交互。我认为你需要标准 Verifier class (https://github.com/pact-foundation/pact-js/#provider-api-testing):

const { Verifier } = require('@pact-foundation/pact');
let opts = {
  ...
};

new Verifier(opts).verifyProvider().then(function () {
    // do something
});