用于在响应数组中查找关键字的单元测试

Unit Test to find a keyword in a response array

大家好,我是新来的,

我有一个看起来像这样的响应数据

[
    {
        "Outlet": "Outlet1",
        "Inventory": 12
    },
    {
        "Outlet": "Outlet2",
        "Inventory": 0
    },
    {
        "Outlet": "Outlet3",
        "Inventory": 3
    },
    {
        "Outlet": "Outlet4",
        "Inventory": 0
    }
}

我需要验证出口 1 库存是否准确为 12,并且除了出口 1 库存之外的所有其他数据是否为 ​​0。我需要循环测试吗?

我已经试过了:

pm.test("Inventory.OnHand Outlet1 == 12", () => {
    let Outlet1Result = jsonData.find(a => a.Outlet === "Outlet1")
    pm.expect(Outlet1Result.Outlet).to.eql("Outlet1")
    pm.expect(Outlet1Result.Inventory).to.eql(12)
});


pm.test("Inventory.OnHand not Outlet1 == 0", () => {
    if (jsonData.Outlet !== "Outlet1") {
    jsonData.forEach(function() {
        let result2 = jsonData.find(a => a.Outlet !== "Outlet1")
        pm.expect(result2.Inventory).to.eql(0)
    }) ;
  }  
});

我试过使用这 2 个测试,第一个测试工作得很好,但我认为第二个测试是错误的,因为它已经通过了,它不应该通过,因为出口 3 库存是 3,文本期望它是0

为什么不能直接比较对象而不是单个字段?因为您正在比较精确值。

let expected = [
    {
        "Outlet": "Outlet1",
        "Inventory": 12
    },
    {
        "Outlet": "Outlet2",
        "Inventory": 0
    },
    {
        "Outlet": "Outlet3",
        "Inventory": 3
    },
    {
        "Outlet": "Outlet4",
        "Inventory": 0
    }
]

pm.expect(JSONdata).to.be.deep.eq(expected1, `Expected ${JSON.stringify(JSONdata,null,2)} to be equal to ${JSON.stringify(expected,null,2)}`)

其他方式是:

pm.test("Validate inventory values", () => {
    jsonData.forEach(function (item) {
        if (item.Outlet !== "Outlet1") {
            pm.expect(item.Inventory,
                `Expected inventory value of ${item.Outlet} to be 0`).
                to.
                eql(0)
        } else {
            pm.expect(item.Inventory,
                `Expected inventory value of ${item.Outlet} to be 12`).
                to.
                eql(12)
        }
    })
});