我有一个基于java的服务作为提供者,一个节点JS app作为消费者。
我在这里使用了一个存根运行器https://github.com/spring-cloud-samples/stub-runner-boot来让Node JS针对线程运行。但无论是作为客户端的Node JS,浏览器还是curl,我都会使用此“游标”文本代替正则表达式元素生成的字符串。
这是合同:
request {
method GET()
url value(consumer(regex('/v2/accounts/[0-9]+')))
}
response {
status 200
headers {
contentType(applicationJson())
}
body (
"firstName": regex('[a-zA-Z]*'),
"lastName": regex('[a-zA-Z]*'),
"kycStatus": regex('FAILED|PASSED|PENDING|ERROR'),
"address": [
"streetAddress" : "3244 jackson street",
"city" : "City",
"state" : regex('[a-zA-Z]{2}'),
"zipcode": regex('^\\d{5}\$')
]
)
}
这是来自wiremock的实际回复:
响应: HTTP / 1.1 200 内容类型:[application / json]
{
"firstName": {
"cursor": 9
},
"lastName": {
"cursor": 9
},
"kycStatus": {
"cursor": 27
},
"address": {
"streetAddress": "3244 jackson street",
"city": "City",
"state": {
"cursor": 11
},
"zipcode": {
"cursor": 7
}
}
}
答案 0 :(得分:1)
我注意到你的光标值实际上是正则表达式中的字符数。所以这告诉我一些事情肯定是错的。我以前从未遇到过这种情况。
我认为你需要用值()
包装你的正则表达式request {
method GET()
url value(consumer(regex('/v2/accounts/[0-9]+')))
}
response {
status 200
headers {
contentType(applicationJson())
}
body (
"firstName": value(producer(regex('[a-zA-Z]*'))),
"lastName": value(producer(regex('[a-zA-Z]*'))),
"kycStatus": value(producer(regex('FAILED|PASSED|PENDING|ERROR'))),
"address": [
"streetAddress" : "3244 jackson street",
"city" : "City",
"state" : value(producer(regex('[a-zA-Z]{2}'))),
"zipcode": value(producer(regex('^\\d{5}\$')))
]
)
}
答案 1 :(得分:1)
我遇到了另一个示例,该示例在生成Wiremock存根时以相同的方式影响 request 负载。
如果我没有在请求正文中添加至少一个“字段”,例如:
request{
// ...
body (
value(consumer(regex("[a-zA-Z0-9]+")), producer("derp"))
)
}
要求有效负载为
{
"cursor" : 12
}
由target / META-INF /.../ mappings / myContract.json中生成的该Wiremock存根看到
"bodyPatterns" : [ {
"equalToJson" : "{\"cursor\":12}",
"ignoreArrayOrder" : false,
"ignoreExtraElements" : false
} ]
解决方案
我要做的就是在请求正文中至少添加一个字段
body (
aMadeUpField: value(consumer(regex("[a-zA-Z0-9]+")), producer("derp"))
)
正则表达式现在将适用于该领域,正如我重新生成的Wiremock存根所示
"bodyPatterns" : [ {
"matchesJsonPath" : "$[?(@.['aMadeUpField'] =~ /[a-zA-Z0-9]+/)]"
} ]
这可能就是为什么文档中隐藏一行仅显示JSON is supported for the request body的原因。
编辑:要检查的另一件事是应将“ anyBoolean()”更改为“ aBoolean()”和应将“ anInteger()”更改为“ anyInteger()”(SCC为i猜测确实与命名不一致...)。我通过ctrl +将鼠标悬停在常规方法上并确保它们返回DslProperty或ClientDslProperty,来再次检查它们在IntelliJ中是否正确
而且,正如另一位发布者所说,请确保将任何regex()与value()包装在一起,并在需要时使用consumer()和producer()。