JavaコンシューマーとJavaScriptプロバイダーのコントラクトテスト

Sep 01 2020

1つがもう1つの消費者である2つのサービスがあります。コンシューマーはJavaで記述され、プロバイダーはJavaScriptで記述されています。

コンシューマー側では、pact-jvmを使用してconsumer-contract-testを定義し、コントラクトを生成できます。この契約では、応答は次のように定義されています。

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

私たちのプロバイダーでは、pact-jsを使用してprovider-contract-testを定義しようとしていますが、pact-jsでaMessageProviderPactを使用してコントラクトを検証しているという問題が発生しています。ただし、テストを実行すると、本文は次のようなコンテンツ属性に含まれることが期待されます。

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'
            )
        ]
    });

これを解決する方法について何かアイデアはありますか?コンシューマー側でコンテンツキーを使用して同様のメッセージ構造を使用することは可能ですか?または、プロバイダー側​​で他の方法で解決できますか

回答

MatthewFellows Sep 02 2020 at 06:58

MessageProviderPactHTTPインタラクションではなく、メッセージキュータイプのインタラクション用です。標準Verifierクラスが必要だと思います(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
});