Java 소비자 및 JavaScript 공급자에 대한 계약 테스트

Sep 01 2020

하나가 다른 하나의 소비자 인 2 개의 서비스가 있습니다. 소비자는 Java로 작성되고 공급자는 JavaScript로 작성됩니다.

소비자 측에서는 pact-jvm을 사용하여 소비자 계약 테스트를 정의했으며 계약을 생성 할 수 있습니다. 이 계약에서 응답은 다음과 같이 정의됩니다.

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

공급자에서 우리는 이제 pact-js를 사용하여 provider-contract-test를 정의하려고 시도하고 있지만 pact-js MessageProviderPact에서 계약을 확인하기 위해 a 를 사용하는 문제에 부딪 혔 습니다. 그러나 테스트를 실행할 때 본문은 다음과 같은 콘텐츠 속성에있을 것으로 예상됩니다.

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