Teste de contrato para um consumidor Java e provedor de JavaScript
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
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
});