Использование Pact.eachLike(), когда содержимое массива варьируется для каждого элемента
Привет, у меня есть тест Consumer, созданный с помощью Pact NPM https://www.npmjs.com/package/pact
Я использую следующий код для генерации pact.json:
provider
.addInteraction({
state: 'test',
uponReceiving: 'a test,
withRequest: {
method: 'GET',
path: '/test'
},
willRespondWith: {
status: 200,
headers: { 'Content-Type': 'application/json' }
body: {
"company": like("My big company"),
"factories": eachLike({
"location": like("Sydney"),
"capacity": like(5)
},{min:1})
}
}
})
.then(function(){ done(); });
Он генерирует следующий файл testconsumer-testprovider.json:
{
"consumer": {
"name": "TestConsumer"
},
"provider": {
"name": "TestProvider"
},
"interactions": [
{
"description": "a request for loans",
"providerState": "broker is logged in, list all loans",
"request": {
"method": "GET",
"path": "/test"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/vnd.hal+json"
},
"body": {
"company": "My big company",
"factories": [
{
"location": "Sydney",
"capacity": 5
}
]
},
"matchingRules": {
"$.headers.Content-Type": {
"match": "regex",
"regex": "application\\/.*json.*"
},
"$.body.company": {
"match": "type"
},
"$.body.factories": {
"min": 1
},
"$.body.factories[*].*": {
"match": "type"
},
"$.body.factories[*].location": {
"match": "type"
},
"$.body.factories[*].capacity": {
"match": "type"
}
}
}
}
],
"metadata": {
"pactSpecification": {
"version": "3.0.0"
}
}
}
Однако, когда мы проверяем следующие данные, мы получаем ошибку с geographicCoords, потому что это неожиданный ключ / значение:
{
"company": "My Company",
"factories": [
{
"location": "Sydney",
"capacity": 5
},
{
"location": "Sydney",
"geographicCoords": "-0.145,1.4445",
"capacity": 5,
}
]
}
Поэтому есть возможность разрешить неожиданные ключи / значения в массивах, потому что мы проверяем только требуемые ключи / значения, и мы не хотим, чтобы в будущем пакт-тесты проваливались, когда новые значения добавляются нашим поставщикам.
1 ответ
Описанный вами сценарий поддерживается, см. Пример https://github.com/pact-foundation/pact-js/tree/master/examples/e2e.
Если вы должны были удалить, скажите объект соответствия и запустите тесты, все по-прежнему работает.
Если у вас все еще есть проблемы, пожалуйста, поднимите дефект на pact-js
хранилище, и мы доберемся до сути.