首页 > 解决方案 > 如何测试 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 函数可以提供此功能,或者我是否被迫针对这种情况实施递归辅助函数?

标签: javascripttestingpostmanbddchai

解决方案


您可以利用内置Lodash函数对数据进行更多细分,而不是尝试在 pm.expect() 语句中全部完成。

_.get()功能可能是一个有用的探索 - https://lodash.com/docs/4.17.11#get


推荐阅读