【问题标题】:Postman test fails test for array when array with one item is returned当返回包含一项的数组时,邮递员测试对数组的测试失败
【发布时间】:2020-11-26 23:06:48
【问题描述】:

我有一个邮递员测试用例:

pm.test("Check for property of type null or array", function(){
    var isNullOrArray = (property === null || typeof(property) === "array");
    pm.expect(isNullOrArray, "property is of type " + typeof(property)).to.be.true;
}); 

不幸的是,当我模拟一个返回一个数组的响应时,它只有一个这样的项目:

"property": [
    {
        "user_id": 1234,
        "is_true": false
    }
 ]

测试失败,在日志中我可以看到 typeof(property) 是一个对象。

该测试似乎适用于数组中包含多个项目的其他响应。我的测试有什么问题? typeof(property) === "array" 甚至可能吗?或者是否有可能因为其中只有一个对象而无法识别该数组?

【问题讨论】:

    标签: postman


    【解决方案1】:

    使用 array.isArray 代替,在 javascript 类型的数组中返回对象,因为在 javascript 中除了原始类型之外的一切都是对象(意味着只有不可变的数据类型被视为非对象)

    pm.test("Check for property of type null or array", function(){
        var isNullOrArray = (property === null || Aarray.isArray(property));
        pm.expect(isNullOrArray, "property is of type " + typeof(property)).to.be.true;
    }); 
    

    https://developer.mozilla.org/en-US/docs/Glossary/Primitive ,数组不是原始数据类型,因此被视为对象

    a = [1,2,3]
    
    b =a
    
    a[2] = 5
    
    console.log(b)
    

    你可以看到改变'a'会改变'b',因为它们是可变的,因此它是一个对象

    【讨论】:

    • 我不知道它是如何传递给其他响应的,你能否添加一个传递它不应该传递的示例
    • @PHide,你是对的,它总是失败。我一定想象过这些通行证......
    • @PHide,您的解决方案有效!也感谢您对类型的解释!
    • @nemu 你能通过点击勾号来接受答案吗
    猜你喜欢
    • 2020-01-04
    • 2020-11-19
    • 2018-07-29
    • 2021-01-27
    • 2019-09-12
    • 2016-08-22
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多