Pact matcher, который проверял бы как регулярное выражение, так и ноль
У меня есть ниже файл пакта со следующими взаимодействиями
"interactions": [
{
"description": "I call fixture service using a valid fixture Id",
"providerState": "a request to check the api response",
"request": {
"method": "get",
"path": "/api/v1.0/abc/5d550d86-fe18-44e5-93d2-817318acca3d",
"headers": {
"Accept": "application/json",
"X-Clarksons-Security-Cloud": "xxxxyyyyy"
}
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"body": {
"fixtureId": "5d550d86-fe18-44e5-93d2-817318acca3d",
"fixtureNumber": "145393-02-DR-03-18"
},
"matchingRules": {
"$.body.fixtureId": {
"match": "type"
},
"$.body.fixtureNumber": {
"match": "regex",
"regex": "[0-9]{6}-[0-9]{2}-[a-zA-Z]{2}-[0-9]{2}-[0-9]{2}"
}
}
}
}
],
Есть шанс fixtureNumber
может быть нулевым Пожалуйста, не могли бы вы дать мне знать, что совпадение проверяет оба [0-9]{6}-[0-9]{2}-[a-zA-Z]{2}-[0-9]{2}-[0-9]{2}
а также проверьте на ноль.
2 ответа
Вы можете проверить наличие нулевого символа: \x00
,
Шаблон будет выглядеть примерно так:
([0-9]{6}-[0-9]{2}-[a-zA-Z]{2}-[0-9]{2}-[0-9]{2})|\x00
Вы не можете проверить наличие (с регулярным выражением) или отсутствие поля. Вы должны написать два отдельных теста, которые тестируют для каждого варианта использования, чтобы гарантировать, что ваш код правильно обрабатывает его.
Пожалуйста, прочитайте эту статью, которая объясняет почему: https://docs.pact.io/faq#why-is-there-no-support-for-specifying-optional-attributes
... если Пакт поддерживает утверждение этого элемента
$.body.name
может присутствовать в ответе, тогда вы пишете потребительский код, который может обрабатывать необязательный $.body.name, но на самом деле провайдер дает$.body.firstname
ни один тест никогда не скажет вам, что вы сделали неверное предположение. Помните, что поставщик может вернуть дополнительные данные, не нарушая договор, но он должен предоставить как минимум те данные, которые вы ожидаете.То же самое касается указания "SOME_VALUE или null". Если все данные проверки вашего провайдера вернули для этого ключа пустые значения, вы можете подумать, что вы проверили "SOME_VALUE", но на самом деле этого не произошло. Вы можете получить совершенно другое "SOME_VALUE" для этого ключа в рабочей среде, что может вызвать проблемы.