代码之家  ›  专栏  ›  技术社区  ›  ewok

pact:如何检查响应中可能存在或不存在的字段

  •  3
  • ewok  · 技术社区  · 7 年前

    我有一个服务将用json blob响应请求,例如:

    {
      "field1": 1,
      "field2": "2",
      "array": [1,2,3]
    }
    

    我知道我可以测试 array 通过使用 EachLike ,如下所示:

    expected = {
      "field1": Like(1),
      "field2": Like("2"),
      "array": EachLike(1)
    }
    

    问题是“array”是响应中的可选字段。它可能根本不存在,如果不存在,我仍然需要合同来验证。我如何定义响应主体中的字段必须与类型匹配(如果它存在),但它可能根本不存在?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Beth Skurrie    7 年前

    从…起 https://github.com/pact-foundation/pact-ruby/wiki/FAQ#why-is-there-no-support-for-specifying-optional-attributes

    为什么不支持指定可选属性?

    首先,假设您在进行验证测试时可以控制提供商的数据(和消费者的数据)。如果你不这样做,那么Pact可能不是适合你情况的最佳工具。

    其次,如果你仔细想想,如果Pact支持断言元素$。身体名称可能出现在响应中,然后您编写可以处理可选$的消费者代码。身体名称,但实际上,提供者提供了$。身体firstname,任何测试都会告诉你你做出了错误的假设。请记住,提供商可以在不违反合同的情况下返回额外数据,但它必须至少提供您期望的数据。


    我建议您编写一个需要填充数组的交互,以便您知道如何处理填充的数组。然后把它完全排除在其他交互之外,那么它是否被填充就无关紧要了。