arrays - Pact,确保数组中的键名
问题描述
如果返回的 json 是一个 map,那么在 body 响应中指定的所有键名都将被证明存在。所以
...
"response":
{
"status": 200,
"body":
{
"field1": "value1"
}
...
将确保该正文包含一个键“field1”,如果它丢失,则会发生错误。
但是如果响应体是一个数组呢?如果该数组中的所有或至少一个元素具有特定的键名,我认为没有机会进行测试。但这很重要,如果后端中的键名发生变化,我想得到警告,因为这会在我的应用程序中产生错误。
解决方案
您可以使用eachLike
指定数组元素匹配特定格式。正确的语法取决于您使用的 Pact 框架,但使用 pact-js,您会说:
const { somethingLike: like, term, eachLike } = pact
....
willRespondWith: {
status: 200,
body: eachLike({
"field1": "value1"
})
}
这是文档的相关部分。
您的示例建议您自己编写 Pact 文件 - 如果是这种情况,您可以使用该[*]
符号来描述任何数组元素,如规范中所述:
"response":
{
"status": 200,
"body":
[
{
"field1": "value1"
}
],
...
"matchingRules": {
"$.body": {
"min": 1,
"match": "type"
},
"$.body[*].field1": {
"match": "type"
},
...
推荐阅读
- python-3.x - 在 Python 中裁剪并仅从图像中选择检测到的区域
- javascript - 如何将匿名函数传递给 Jquery 的点击处理程序
- mysql - Laravel - 通过另一个模型的功能从模型中过滤行
- openedge - 尝试编写连接到排序浏览器的查询
- javascript - 这个使用数组的for循环似乎在javascript中不起作用?
- javascript - 我们如何从 JSON 响应中访问包含连字符的数据?
- ruby-on-rails - 如何将 Arel 查询与 ActiveRecord 方法联系起来?
- java - 无法通过Java运行命令,但可以通过cmd运行 CreateProcess error=2, 系统找不到指定的文件
- nuxt.js - 当前路径更改时 Nuxt 布局不会更新
- mysql - “MySQL 8”sql 语句的问题