Я использую spock и wiremock для функционального тестирования в приложении Spring Boot 2.1.5. Входящий URL-адрес:
/mockedserver/v1/Items('1010873195')/Products?$format=json
Да, это довольно странный URL, но я ничего не могу с этим поделать.
Я установил сопоставление пути в JSON с помощью:
{
"request": {
"method": "GET",
"url": "/mockedserver/v1/Items('1010873195')/Products.*",
"queryParams" : {
"$format": "json"
},
"headers": {
"x-csrf-token": "",
"Accept": "application/json",
"Content-Type": "application/json"
}
},
"response": {
"headers": {
"Content-Type": "application/json"
},
"status": 200,
"bodyFileName": "/../responses/mockedserver/get-products/1010873195-success-200.json"
}
}
Как вы могли видеть, я смоделировал странно выглядящий параметр запроса в блоке "queryParams". Это не сработало, поэтому я поместил регулярное выражение .*
в конце URL-адреса.
Оба дали мне результат:
Request was not matched
=======================
-----------------------------------------------------------------------------------------------------------------------
| Closest stub | Request |
-----------------------------------------------------------------------------------------------------------------------
|
GET | GET
/mockedserver/v1/Items('1010873195')/Produ | /mockedserver/v1/Items('1010873195')/Produ<<<<< URL does not match
cts | cts?$format=json
|
|
-----------------------------------------------------------------------------------------------------------------------
Как видите, он совпадает, за исключением части параметра в конце, в основном, мне нет дела до параметра, поэтому я надеялся просто подстановить его.
Одна из возможностей состоит в том, что знак $
создает беспорядок, должен ли я вместо этого избегать его? если да, то как?
Другое дело, что это знак вопроса ?
. Я пытался избежать этого с \?
и \\?
, оба из которых были неудачными.
Относительно той части блока запроса, которая здесь выглядит важной:
"method": "GET",
"url": "/mockedserver/v1/Items('1010873195')/Products.*",
"queryParams" : {
"$format": "json"
},
Я видел , где-то было сказано , что если вы используете urlPath
вместо url
, то WireMock обрабатывает дополнительные заголовки или параметры запроса без параметров соответствия как "все равно, совпадение в любом случае". Но, похоже, это не так, как показывает вывод ошибок.
ДАЛЬНЕЙШАЯ ОБСУЖДЕНИЕ
С тех пор я пробовал различные комбинации, вместо url
ставя urlPath
, urlPattern
и даже urlPathPattern
. Все это приводит к:
Request was not matched
=======================
-----------------------------------------------------------------------------------------------------------------------
| Closest stub | Request |
-----------------------------------------------------------------------------------------------------------------------
|
GET | GET
| /mockedserver/v1/Items('1010873195')/Produ<<<<< URL does not match. URLs must start with a /
| cts?$format=json
|
|
-----------------------------------------------------------------------------------------------------------------------
Я также пробовал это делать с блоком queryParams
и без него, на случай, если это повлияло на совпадение, но, похоже, это не имеет никакого эффекта.
Я начинаю задаваться вопросом, есть ли какой-нибудь другой флаг, который мне нужно установить в вызове stubFor
?