Я использую 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
|
|
-----------------------------------------------------------------------------------------------------------------------
Как видите, он совпадает, за исключением части param в конце, в основном меня не волнует параметр, поэтому я надеялся просто выделить его.
Одна из возможностей состоит в том, что знак $
вносит беспорядок, должен ли я вместо этого убегать от него? если да, то как?
Во-вторых, это вопросительный знак ?
. Я попытался избежать этого с помощью \?
и \\?
, оба из которых оказались безуспешными.
Что касается той части блока запроса, которая здесь выглядит важной:
"method": "GET",
"url": "/mockedserver/v1/Items('1010873195')/Products.*",
"queryParams" : {
"$format": "json"
},
Я видел в другом месте, что если вы используете urlPath
вместо url
, что WireMock обрабатывает лишние заголовки или параметры запроса без параметров соответствия как «все равно, все равно совпадать». Но, как видно из сообщения об ошибке, здесь это не так.
ДАЛЬНЕЙШЕЕ ОБСУЖДЕНИЕ. С тех пор я пробовал различные комбинации, помещая urlPath
, urlPattern
и даже urlPathPattern
, как предлагалось, вместо url
. Все это приводит к:
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
?