在pactdsl请求体中使用正则表达式

时间:2018-03-23 12:00:45

标签: java integration-testing pact pact-jvm

我希望我的pact服务器在使用标头Content-Type: application/x-www-form-urlencoded进行POST调用时返回自定义响应。
但是,POST调用的主体并不总是相同,只有前缀保持不变。
例如,它必须返回相同的内容,无论我将其称为正文input_text=LOGSomeStuffHERE,还是input_text=LOGAnoutherStuff <(如您所见,input_text=LOG是恒定部分) 这是我尝试过的:

.uponReceiving("POST cusom body")
.path("/path")
.method("POST")
.headers(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_FORM_URLENCODED.getMimeType())
.body("input_text=LOG*")
.willRespondWith()
.status(200)
...

PactDsl是否支持请求部分的某种身体匹配?

1 个答案:

答案 0 :(得分:1)

您可以match using a Regex验证您的身体。 DSL中的body本身就是实际的主体(带有假数据),假设要为交互返回,而不实际添加额外的匹配器。如果你想要example of this, look at the test code for the jvm consumer

在您的情况下,您可以:

.uponReceiving("POST cusom body")
.path("/path")
.method("POST")
.headers(HttpHeaders.CONTENT_TYPE, 
   ContentType.APPLICATION_FORM_URLENCODED.getMimeType())
.body(PactDslJsonRootValue.stringMatcher("^input_text\=LOG.*", 
   "input_text=LOG_something"))
.willRespondWith()
.status(200)

第一个参数是正则表达式的字符串表示,而第二个参数是实际传递的字符串,需要通过正则表达式测试。