Teste de contrato para um consumidor Java e provedor de JavaScript

Sep 01 2020

Temos 2 serviços onde um é consumidor do outro. O consumidor é escrito em Java e o provedor é escrito em JavaScript.

No lado do consumidor, definimos um teste de contrato do consumidor usando pact-jvm e somos capazes de gerar um contrato. Neste contrato, a resposta é definida como:

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

Em nosso provedor, estamos tentando definir um teste de contrato de provedor usando pact-js, mas estamos encontrando um problema em que em pact-js estamos usando um MessageProviderPactpara verificar o contrato. Mas ao executar o teste, espera-se que o corpo esteja em um atributo de conteúdo como este:

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

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

Código usado para verificação de pacto

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

Todas as ideias sobre como resolver isso? É possível usar uma estrutura de mensagem semelhante com chave de conteúdo no lado do consumidor? Ou podemos resolver de outra maneira no lado do provedor

Respostas

MatthewFellows Sep 02 2020 at 06:58

MessageProviderPacté para interações de tipo de fila de mensagens, não interações HTTP. Eu acho que você precisa da Verifierclasse padrão (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
});