邮递员 - 我想检查一个值是否在数组中

Jha*_*anz 1 javascript assertion postman

我正在用 JavaScript 编写邮递员测试来断言下面的场景。我有一个 id 1111,响应返回一个 id 数组。我想编写一个测试以将 1111 匹配到数组中的一个 id 中。

我曾尝试使用包含功能,即

pm.test("The response contains a valid id in the response", function() { 
    pm.expect(jsonData.results[0].totalId.children).to.include("1111");
});
Run Code Online (Sandbox Code Playgroud)
{
    "totalId": "0000",
    "children": [{
            "id": "888"
        },
        {
            "id": "3323"
        },
        {
            "id": "1111"
        }
    ]
}  
Run Code Online (Sandbox Code Playgroud)

任何建议。

Div*_*Div 7

您正在尝试检查数组中的值children,因此,您不应使用.totalId.children,而必须使用 is jsonData.results[0].children

当您尝试检查数组对象的值时,您需要添加自定义 JavaScript 逻辑来检查idparam的值。

这是您可以在测试脚本中使用的函数。

function _isContains(json, keyname, value) {
return Object.keys(json).some(key => {
        return typeof json[key] === 'object' ? 
        _isContains(json[key], keyname, value) : key === keyname && json[key] === value;
    });
}
Run Code Online (Sandbox Code Playgroud)

该函数_isContains检查数组中每个对象的值和键名。

现在,您可以将所需的输入传递给测试用例中的函数。

pm.test("The response contains a valid id in the response", function () {
    pm.expect(_isContains(jsonData.children, "id" ,"1111")).to.be.true;
});
Run Code Online (Sandbox Code Playgroud)

这将使用 keyid和 value从对象的数组中检查1111,如果可用,则返回 true,否则返回 false。


最终测试脚本

var jsonData = pm.response.json();

pm.test("The response contains a valid id in the response", function () {
    pm.expect(_isContains(jsonData.children, "id" ,"1111")).to.be.true;
});

function _isContains(json, keyname, value) {
 return Object.keys(json).some(key => {
        return typeof json[key] === 'object' ? 
        _isContains(json[key], keyname, value) : key === keyname && json[key] === value;
    });
}
Run Code Online (Sandbox Code Playgroud)


Gil*_*ier 6

一个更简单的解决方案可能是:

const child = jsonData.results[0].totalId.children.find(c => c.id === "1111");
pm.expect(child).exist;
Run Code Online (Sandbox Code Playgroud)

这种方法的优点是您可以轻松扩展测试套件以验证扩展的键/值(如 @Ajeet Shah 的示例中所述):

pm.expect(child.value).is.not.null;
Run Code Online (Sandbox Code Playgroud)

注意:假设数组中只有一项的 ID 为“1111”。实际上,find() 方法返回所提供数组中满足所提供测试函数的第一个元素的值。如果没有值满足测试函数,则返回 undefined。

Array.prototype.find()