javascript - 如何测试 Postman 中是否存在(可能)嵌套的 JSON 属性?
问题描述
我想测试是否缺少嵌套属性“x”
如果响应看起来像这样,则测试必须失败
A:
{
"first": 1,
"second": {
"one": 1,
"two": 2,
"three": {
"x": 1,
"y": 2
}
}
}
但是对于以下示例,它必须通过:
乙:
{
"first": 1,
"second": {
"one": 1,
"two": 2,
"three": {
"y": 2
}
}
}
C:
{
"first": 1,
"second": {
"one": 1,
"two": 2
}
}
丁:
{
"first": 1
}
当然。我可以pm.expect(object).to.not.have.property("x")
用来测试是否缺席。但这并不是在所有情况下都有用。
例如,我的 PostMan 测试代码:
pm.test("(nested)property 'x' not available", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.second.three).to.not.have.property("x")
});
对于情况 A 和 B 会很好,但不适用于 C 和 D,因为属性的父级“第二”或“三个”可以是未定义的。但我不想测试它们是否存在,因为它不是这个特定测试的目标。
是否有任何 BDD Chai 函数可以提供此功能,或者我是否被迫针对这种情况实施递归辅助函数?
解决方案
您可以利用内置Lodash
函数对数据进行更多细分,而不是尝试在 pm.expect() 语句中全部完成。
该_.get()
功能可能是一个有用的探索 - https://lodash.com/docs/4.17.11#get
推荐阅读
- javascript - MongoError:无效操作,未指定操作 Bulk.execute()
- java - Spring @PostMapping 抛出 HttpRequestMethodNotSupportedException
- javascript - 参数用于过滤数组的属性
- python - Windows 中的 Python 配置 - 模块位置 - pip vs Eclipse/Liclipse
- visual-studio-2019 - Visual Studio 2019 预览版远程调试器
- javascript - 如何使用内联 SVG 制作复杂的交互式 SVG 对象
- sparql - SPARQL 选择等效类的实例
- javascript - 使用状态的自定义组件在状态更改时不会更新
- npm - npm - 摆脱一个特定模块中的嵌套 node_modules
- angular - ISS/angular 中的 Http 获取问题