【问题标题】:pact matcher for different number of elements in array数组中不同数量元素的约定匹配器
【发布时间】:2021-02-28 10:19:18
【问题描述】:

我有一个返回以下类型响应的端点:

"0": {
  "array": [
    "items",
    2,
    "item1",
    "item2"
  ]
}

目前我已经编写了如下的契约匹配器:

o.object("0", o1 -> {
  o1.array("array", a1 -> {
    a1.stringValue("items");
    a1.numberType(2);
    a1.stringType("item1");
    a1.stringType("item2");
  });
});

现在这只有在提供者返回数组中元素的确切数量时才有效。如果提供者没有返回其中一项,则它不起作用,例如:

"0": {
  "array": [
    "items",
    1,
    "item1"
  ]
}

或者如果提供者退回了额外的项目:

"0": {
  "array": [
    "items",
    3,
    "item1",
    "item2",
    "item3"
  ]
}

第一个元素是固定的,第二个元素提到返回的项目数,然后跟项目数一样多的元素。

如何为此编写匹配器? 谢谢。

【问题讨论】:

    标签: pact pact-jvm


    【解决方案1】:

    有一个新的数组包含匹配器,它可能会有所帮助https://docs.pact.io/implementation_guides/jvm/consumer/#array-contains-matcher-v4-specification,它可以让您指定数组的异构元素。

    您提供的具有特定语义的结构很难以这种方式进行测试。

    【讨论】:

    • 谢谢,我在上面提到的代码中尝试了 arrayContaining() 方法而不是 array(),但它给了我以下错误:01 Mar 2021 16:20:51,400 DEBUG ArrayContainsJsonGenerator:43 [HTTP-Dispatcher]将变体 0 与值“项目”进行比较 2021 年 3 月 1 日 16:20:51,401 错误 BaseJdkMockServer:235 [HTTP-Dispatcher] 无法生成响应 au.com.dius.pact.core.model.InvalidPathExpression:路径表达式“[0]”不以根标记“$”开始
    • 听起来您的匹配器级别可能有误,因此您可能需要为您的答案提供“更新”,以便我们进行诊断。但我建议加入 slack.pact.io 或在 Pact JVM 存储库上提出可重现的问题。
    • 谢谢,我在 pact jvm repo 中提出了一个问题:github.com/pact-foundation/pact-jvm/issues/1318
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多