我无法使用PACT DSL .closeObject()
格式化PACT相互作用响应。我要求提出建议以进行这项工作或询问.closeObject()
是否不按预期工作?我有一个带2个物品的购物车。当我尝试将预期响应格式化时,使用2个项目,使用.closeObject()
,它不会编译,请参见下面的代码。编译错误在".stringMatcher("name","iPhone")
行之后的第一个.closeObject()
上。我需要在PACT文件预期响应中创建shoppingCartItems
的层次结构。可以从此链接中找到PACT DSL .closeObject()
的广告使用情况,在"与MAP"部分的"匹配任何键"的PACT DSL示例中使用.closeObject((
private DslPart respSc6() {
DslPart body = new PactDslJsonBody()
.stringMatcher("id", "ShoppingCart_[0-9]*", "ShoppingCart_0")
.eachLike("shoppingCartItem")
.numberValue("quantity", 1)
.stringMatcher("state","new")
.object("productOffering")
.stringMatcher("id","IPHONE_7")
.stringMatcher("name","iPhone")
.closeObject()
.numberValue("quantity", 5)
.stringMatcher("state","new")
.object("productOffering")
.stringMatcher("id","SMSG_GLXY_S8")
.stringMatcher("name","Samsung_Galaxy_S8")
.closeObject()
.closeObject()
.closeArray();
return body;
}
预期的JSON响应有效载荷,看起来像预期的PACT响应有效负载,使用层次数据
这是校正和注释的代码,可以匹配您的示例JSON。
private DslPart respSc6() {
DslPart body = new PactDslJsonBody()
.stringMatcher("id", "ShoppingCart_[0-9]*", "ShoppingCart_0")
.eachLike("shoppingCartItem") // Starts an array [1] and an object [2] (like calling .object(...)) and applies it to all items
.numberValue("quantity", 1)
.stringMatcher("state", "new") // You are using a simple string as the regex here, so it will only match 'new'
.object("productOffering") // Start a new object [3]
.stringMatcher("id", "IPHONE_7") // Again, this regex will only match 'IPHONE_7'
.stringMatcher("name", "iPhone") // Again, this regex will only match 'iPhone'
.closeObject() // Close the object started in [3]
.closeObject() // Close the object started in [2]
.closeArray(); // Close the array started in [1]
return body;
}
您不需要为shoppingCartItem
数组提供两个示例对象定义,因为.eachLike
匹配器旨在将一个定义应用于数组中的所有项目。如果您希望生成的示例JSON包含两个项目,请将数字传递为第二个参数,例如.eachLike("shoppingCartItem", 2)
。