邮递员API测试:无法断言值是true

时间:2018-10-10 15:34:19

标签: postman

我正在使用返回以下数据的GET请求测试API:

    {
    "Verified": true,
    "VerifiedDate": 2018-10-08
}

我正在尝试测试第一个字段是否返回真,而第二个字段具有值。我有以下代码:

    pm.test("Verified should be true", function () {
   var Status = pm.response.json();
   pm.expect(Status.Verified).to.be.true;
});

    pm.test("Returns a verified date", function () {
   var Status = pm.response.json();
   pm.expect(Status.VerifiedDate).to.not.eql(null);

});

关于true的断言由于以下原因而失败:

已验证应为真| AssertionError:期望未定义为真

为什么第一个测试失败?

我正在对post命令运行相同的测试,而没有任何问题。

有什么想法吗?

谢谢

2 个答案:

答案 0 :(得分:2)

根本原因: 您的结果是一个数组,但是您的测试正在验证一个对象。因此,邮递员将抛出异常,因为它无法比较。

解决方案: 使用if else命令精确比较列表中某项的值。

var arr = pm.response.json(); 
console.log(arr.length) 
for (var i = 0; i < arr.length; i++)
{ 
    if(arr[i].Verified === true){
        pm.test("Verified should be true", function () {
            pm.expect(arr[i].Verified).to.be.true;
        });
    }
    if(arr[i].Verified === false){
        pm.test("Verified should be false", function () {
            pm.expect(arr[i].Verified).to.be.false;
        });
    }     
}

希望它能对您有所帮助。

答案 1 :(得分:1)

您也可以这样做:

pm.test('Check the response body properties', () => {
    _.each(pm.response.json(), (item) => {
        pm.expect(item.Verified).to.be.true
        pm.expect(item.VerifiedDate).to.be.a('string').and.match(/^\d{4}-\d{2}-\d{2}$/)
    })
})

该检查将为您做一些事情,它将遍历整个数组并检查Verified属性是否为true,并检查VerifiedDate是否为字符串,并且匹配YYYY-MM-DD格式,就像您的问题中给出的示例一样。