Javascript 如何测试Postman中是否缺少(可能)嵌套的JSON属性?

Javascript 如何测试Postman中是否缺少(可能)嵌套的JSON属性?,javascript,testing,postman,bdd,chai,Javascript,Testing,Postman,Bdd,Chai,我想测试是否缺少嵌套属性“x” 如果响应如下所示,则测试必须失败 A: 但对于以下示例,它必须通过: B: C: D: 当然。我可以使用pm.expect(object).to.not.have.property(“x”)来测试缺席情况。但这并不是在所有情况下都有用 例如,我的邮递员测试代码: pm.test("(nested)property 'x' not available", function () { var jsonData = pm.response.json();

我想测试是否缺少嵌套属性“x”

如果响应如下所示,则测试必须失败

A:

但对于以下示例,它必须通过:

B:

C:

D:

当然。我可以使用
pm.expect(object).to.not.have.property(“x”)
来测试缺席情况。但这并不是在所有情况下都有用

例如,我的邮递员测试代码:

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函数可以提供此功能,或者我必须为这种情况实现递归帮助器函数?

这不是您想要的,但我希望它对任何感兴趣的人都有用

首先,将JSON字符串化为字符串,然后搜索包含双引号的关键字,以精确查找确切的单词(它的属性)

当然,这只是一个概念,但我认为如果其他一切都失败了,你可以尝试一下

我知道还有改进的余地。因此,如果需要,请随意调整

const案例=[{
"第一":一,,
“第二”:{
"一":一,,
"二":,
“三”:{
“x”:1,
“y”:2
}
}
},
{
"第一":一,,
“第二”:{
"一":一,,
"二":,
“三”:{
“y”:2
}
}
},
{
"第一":一,,
“第二”:{
"一":一,,
“两个”:2
}
},
{
"第一":一,,
“示例”:“notx”
}
]
const property=“x”//property,您正在查找它的缺失
案例。forEach(c=>{
log(JSON.stringify(c).includes(““+property+”))
//True=属性存在| False=属性不存在

})
您可以使用内置的
Lodash
函数对数据进行更多分解,而不是在pm.expect()语句中尝试全部分解

\uuu.get()
函数可能是一个有用的函数,可以使用-

我的最终解决方案来探索这一点:

var a={
"第一":一,,
“第二”:{
"一":一,,
"二":,
“三”:{
“x”:1,
“y”:2
}
}
};
变量b={
"第一":一,,
“第二”:{
"一":一,,
"二":,
“三”:{
“y”:2
}
}
};
变量c={
"第一":一,,
“第二”:{
"一":一,,
“两个”:2
}
};
变量d={
“第一”:1
};
test(“(嵌套的)属性“x”在“a”中不可用,函数(){//必须失败才能运行
var jsonData=a;
expect(u.get(jsonData,“second.three.x”,未定义)).to.be.undefined;
});
pm.test(“(嵌套)属性“x”在“b”中不可用,函数(){
var jsonData=b;
expect(u.get(jsonData,“second.three.x”,未定义)).to.be.undefined;
});
pm.test(“(嵌套)属性“x”在“c”中不可用,函数(){
var jsonData=c;
expect(u.get(jsonData,“second.three.x”,未定义)).to.be.undefined;
});
test(“(嵌套)属性“x”在“d”中不可用,函数(){
var jsonData=d;
expect(u.get(jsonData,“second.three.x”,未定义)).to.be.undefined;
});

您是否能够使用任何Lodash函数来进一步分解数据,而不是在
pm.expect()语句中尝试全部分解。
\uu.get()
函数可能很有用@DannyDainton:谢谢你的提示。这正是我要找的。请将您的评论内容复制到帖子中作为答案,以便我可以接受。看到您对这个问题的最终解决方案,帮助其他人了解您是如何使用它来实现您的目标,这将是一件好事。
{
    "first": 1,
    "second": {
        "one": 1,
        "two": 2,
        "three": {
            "y": 2
        }
    }
}
{
    "first": 1,
    "second": {
        "one": 1,
        "two": 2
    }
}
{
    "first": 1
}
pm.test("(nested)property 'x' not available", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.second.three).to.not.have.property("x")
});