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

时间:2017-12-01 14:14:52

标签: python pact

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

其次,如果你考虑一下,如果Pact支持断言元素$ .body.name可能存在于响应中,那么你编写的消费者代码可以处理一个可选的$ .body.name,但事实上,提供者提供$ .body.firstname,没有测试会告诉你,你做了一个不正确的假设。请记住,提供商可以在不失败合同的情况下返回额外数据,但它必须至少提供您期望的数据。

我建议您在需要填充数组时编写一个交互,以便了解如何处理填充的数组。然后将其完全排除在其他交互之外,然后无论是否填充它都无关紧要。