Test del contratto per un consumatore Java e un provider JavaScript
Abbiamo 2 servizi in cui uno è il consumatore dell'altro. Il consumatore è scritto in Java e il provider è scritto in JavaScript.
Dal punto di vista del consumatore abbiamo definito un test del contratto con il consumatore utilizzando pact-jvm e siamo in grado di generare un contratto. In questo contratto la risposta è definita come:
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"body": [
"test"
]
},
Sul nostro provider stiamo ora cercando di definire un provider-contract-test usando pact-js ma stiamo riscontrando un problema in cui in pact-js stiamo usando a MessageProviderPactper verificare il contratto. Ma quando si esegue il test, il corpo dovrebbe essere in un attributo di contenuto come questo:
Key: - is expected
+ is actual
Matching keys and values are not shown
-[
- "test"
-]
+{
+ "contents": {
+ "statusCode": 200,
+ "body": "[test]"
+ }
+}
Codice utilizzato per la verifica del patto
const p = new MessageProviderPact({
messageProviders: {
'': handler
},
provider: 'provider-service',
pactUrls: [
path.resolve(
process.cwd(),
'pacts',
'consumer-service-provider-service.json'
)
]
});
Qualche idea su come risolverlo? È possibile utilizzare una struttura di messaggio simile con la chiave del contenuto dal lato del consumatore? Oppure possiamo risolverlo in altro modo dal lato del provider
Risposte
MessageProviderPactè per le interazioni di tipo coda di messaggi, non per le interazioni HTTP. Penso che tu abbia bisogno della Verifierclasse standard (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
});