Pact matcher, который проверял бы как регулярное выражение, так и ноль - PullRequest
0 голосов
/ 10 января 2019

У меня есть файл пакта ниже со следующими взаимодействиями

"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 ]

0 голосов
/ 11 января 2019

Вы не можете проверить наличие (с регулярным выражением) или отсутствие поля. Вы должны написать два отдельных теста, которые тестируют для каждого варианта использования, чтобы убедиться, что ваш код правильно его обрабатывает.

Пожалуйста, прочтите эту статью, которая объясняет, почему: https://docs.pact.io/faq#why-is-there-no-support-for-specifying-optional-attributes

... если Pact поддерживает утверждение о том, что элемент $.body.name может присутствовать в ответе, тогда вы пишете потребительский код, который может обрабатывать необязательный $ .body.name, но на самом деле провайдер выдает $.body.firstname ни один тест никогда не скажет вам, что вы сделали неверное предположение. Помните, что поставщик может вернуть дополнительные данные, не нарушая договор, но он должен предоставить как минимум те данные, которые вы ожидаете.

То же самое касается указания "SOME_VALUE или null". Если все данные проверки вашего провайдера вернули для этого ключа пустые значения, вы можете подумать, что вы проверили «SOME_VALUE», но на самом деле этого не произошло. Вы можете получить совершенно другое «SOME_VALUE» для этого ключа в работе, что может вызвать проблемы.

0 голосов
/ 10 января 2019

Вы можете проверить наличие нулевого символа: \x00.

Шаблон будет выглядеть примерно так:

([0-9]{6}-[0-9]{2}-[a-zA-Z]{2}-[0-9]{2}-[0-9]{2})|\x00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...