1

我有以下带有以下交互的协议文件

"interactions": [
{
"description": "I call fixture service using a valid fixture Id",
"providerState": "a request to check the api response",
"request": {
"method": "get",
"path": "/api/v1.0/abc/5d550d86-fe18-44e5-93d2-817318acca3d",
"headers": {
"Accept": "application/json",
"X-Clarksons-Security-Cloud": "xxxxyyyyy"
}
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"body": {
"fixtureId": "5d550d86-fe18-44e5-93d2-817318acca3d",
"fixtureNumber": "145393-02-DR-03-18"
},
"matchingRules": {
"$.body.fixtureId": {
"match": "type"
},
"$.body.fixtureNumber": {
"match": "regex",
"regex": "[0-9]{6}-[0-9]{2}-[a-zA-Z]{2}-[0-9]{2}-[0-9]{2}"
}
}
}
}
],

有机会fixtureNumber可以为空。请让我知道一个匹配器,它既可以检查[0-9]{6}-[0-9]{2}-[a-zA-Z]{2}-[0-9]{2}-[0-9]{2}也可以检查空值。

4

2 回答 2

1

您可以检查空字符:\x00.

该模式看起来像:

([0-9]{6}-[0-9]{2}-[a-zA-Z]{2}-[0-9]{2}-[0-9]{2})|\x00
于 2019-01-10T12:05:51.977 回答
0

您不能同时测试是否存在(使用正则表达式)或不存在字段。您应该为每个用例编写两个单独的测试,以确保您的代码正确处理它。

请阅读这篇解释原因的文章:https ://docs.pact.io/faq#why-is-there-no-support-for-specifying-optional-attributes

...如果 Pact 支持断言元素$.body.name可能存在于响应中,那么您编写可以处理可选 $.body.name 的消费者代码,但实际上,提供者给出$.body.firstname,任何测试都不会告诉您你做了一个不正确的假设。请记住,提供者可能会返回额外的数据而不会违反合同,但它必须至少提供您期望的数据。

指定“SOME_VALUE 或 null”也是如此。如果您的所有提供者验证测试数据都针对此键返回空值,您可能会认为您已经验证了“SOME_VALUE”,但实际上,您从未验证过。在生产环境中,您可能会得到一个完全不同的“SOME_VALUE”,这可能会导致问题。

于 2019-01-11T02:18:34.453 回答