我正在尝试为GET请求创建合约,并且我想使用路径参数,该参数也可以在响应中重复使用。这是可能吗?我只能找到POST,查询参数和正文的示例。 因此,如果我想定义一个请求实体的合同,即/ books / 12345-6688,我想在响应中重用指定的ID。
如何为此类内容创建合约?
答案 0 :(得分:4)
自Spring Cloud Contract 1.2.0-RC1 (在this issue中修复)以来可能。
response {
status 200
body(
path: fromRequest().path(),
pathIndex: fromRequest().path(1) // <-- here
)
}
请参阅docs。
答案 1 :(得分:2)
由于https://github.com/tomakehurst/wiremock/issues/383,这是不可能的。从理论上讲,您可以创建自己的转换器+覆盖Spring Cloud Contract中生成存根的方式。这样,WireMock存根将包含对新变换器的引用(如WireMock文档中所示 - http://wiremock.org/docs/extending-wiremock/)。但这听起来似乎没有那么多必要的工作。为什么你需要像这样做?在消费者方面,你想测试集成,对吧?因此,只需对合同中的某些值进行硬编码,而不是引用它们,然后检查是否可以解析这些值。
更新: 如果您只需要参数化请求URL但不想在响应中引用它,则可以使用此处的正则表达式 - https://cloud.spring.io/spring-cloud-contract/single/spring-cloud-contract.html#_regular_expressions
UPDATE2: 就像@laffuste提到的那样,从RC1开始,你可以引用一个具体的路径元素