Контрактный тест для потребителя Java и поставщика JavaScript
У нас есть 2 сервиса, одна из которых является потребителем другой. Потребитель написан на Java, а поставщик написан на JavaScript.
На стороне потребителя мы определили тест-контракт потребителя с помощью pact-jvm, и мы можем создать контракт. В этом контракте ответ определяется как:
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"body": [
"test"
]
},
В нашем провайдере мы сейчас пытаемся определить тест-контракт-поставщик с использованием pact-js, но мы сталкиваемся с проблемой, когда в pact-js мы используем a MessageProviderPactдля проверки контракта. Но при запуске теста ожидается, что тело будет в таком атрибуте содержимого:
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'
)
]
});
Есть идеи, как это решить? Можно ли использовать аналогичную структуру сообщения с ключом содержимого на стороне потребителя? Или мы можем решить это любым другим способом на стороне провайдера
Ответы
MessageProviderPactпредназначен для взаимодействий типа очереди сообщений, а не для HTTP-взаимодействий. Думаю нужен стандартный 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
});