Test umowy dla konsumenta Java i dostawcy JavaScript

Sep 01 2020

Mamy 2 usługi, z których jedna jest konsumentem drugiej. Konsument jest napisany w Javie, a dostawca jest napisany w JavaScript.

Po stronie konsumenta zdefiniowaliśmy test umowy konsumenckiej za pomocą pact-jvm i jesteśmy w stanie wygenerować umowę. W tej umowie odpowiedź definiuje się następująco:

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

W przypadku naszego dostawcy próbujemy teraz zdefiniować test umowy z dostawcą za pomocą pact-js, ale napotykamy problem polegający na tym, że w pact-js używamy a MessageProviderPactdo weryfikacji umowy. Jednak podczas uruchamiania testu treść powinna znajdować się w atrybucie treści takim jak ten:

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

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

Kod używany do weryfikacji paktu

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

Masz jakiś pomysł, jak to rozwiązać? Czy można zastosować podobną strukturę wiadomości z kluczem treści po stronie konsumenta? Czy możemy rozwiązać to w inny sposób po stronie dostawcy

Odpowiedzi

MatthewFellows Sep 02 2020 at 06:58

MessageProviderPactdotyczy interakcji typu kolejki komunikatów, a nie interakcji HTTP. Myślę, że potrzebujesz standardowej Verifierklasy (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
});