我正在使用Spock和Wiremock在Spring Boot 2.1.5应用程序中进行功能测试。传入的网址是:
/mockedserver/v1/Items('1010873195')/Products?$format=json
是的,这是一个非常奇怪的网址,但我对此无能为力。
我已经使用以下命令在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”块中对看起来很奇怪的请求参数进行了建模。这行不通,因此我将正则表达式.*
放在网址的末尾。
两个都给了我结果:
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部分,它基本上是匹配的,我根本不关心param,所以我希望只将其通配。
一种可能性是$
符号使事情变得一团糟,我应该转而转义吗?如果可以,怎么办?
另一个是它的问号?
。我尝试使用\?
和\\?
进行转义,但这两个都不成功。
只考虑请求块中看起来很重要的部分:
"method": "GET",
"url": "/mockedserver/v1/Items('1010873195')/Products.*",
"queryParams" : {
"$format": "json"
},
我有seen it said elsewhere的话,如果您使用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
块的情况,以防万一这有助于匹配,但似乎没有任何效果。
我开始怀疑在obj/%.o : src/%.cc | obj
$(build_obj_file)
调用中是否还需要设置其他标志?
答案 0 :(得分:1)
已修复:基本上,您需要urlPath,没有queryParams和基于字符串的正则表达式模式,我通过以下方法解决了该问题:
/^\\/mockedserver\\/v1\\/Items\('[0-9]{10}'\)\\/Products/
基本上,它归结为正确的组合。
答案 1 :(得分:0)
我认为您需要在映射中尝试使用“ urlPathPattern”或“ urlPath”而不是“ url”,如下所示:
"urlPathPattern": "/mockedserver/v1/Items('1010873195')/Products.*"