下面的测试将正确通过,但如果我发布{"a different key" : 4.56}
的正文,它将失败为"key"预计。换句话说,字典键是不灵活的,只有浮点值。
我如何定义一个契约,其中只有字典类型重要,即键必须是字符串,值必须是浮点数?文档没有明确说明:https://github.com/pact-foundation/pact-python
def test_case_1(pact, client):
(
pact.given("object does not exist")
.upon_receiving("a new post request")
.with_request(
"post",
"/url/post/endpoint",
body=Like({"key": 1.23})
.will_respond_with(200, body={})
)
with pact:
client.post(body={"key": 4.56})
我想你会说"我不在乎那个键是否存在"。如果是这种情况,那么就不要包含您不感兴趣的键。
如果您在某些情况下需要它,但在其他情况下不需要,您最好为您实际需要的每个场景编写一个测试用例,而不是定义提供程序API可以做什么(测试您的代码,而不是提供程序)
社区成员Tim Jones有一个非常好的方法来思考匹配器:
将匹配器视为"此测试涵盖通过此匹配器的所有情况",而不是"这是响应模式">
我也会阅读这篇文章,以了解您可能要求的危险:https://docs.pact.io/faq#why-is-there-no-support-for-specifying-optional-attributes