获取null时,无法读取postman脚本中的属性

时间:2018-01-23 11:41:59

标签: rest postman

我在邮递员Tests标签中运行脚本时收到错误,当我尝试检查某个属性不是null时。

我的JSON回复:

{
    "statusMessage": "Success",
    "timeStamp": "2018-01-23 05:13:16.7",
    "numberOfRecords": 7,
    "parties": [
        {

        "shippingAddress": null,
        "shippingDetails": null,
        "paExpirationDate": "",
        "historyDate": "01/22/2018",
        "renewal": {
            "renewalRx": "N",
            "priorRxNumber": "",
            "priorSB": "",
            "priorFillNumber": ""
        },
        "noOfRefillingRemaining": "1",
        "ndc": "00074-3799-06",
        "rxId": "7004942",
        "fillingNumber": "0"
    },

    {          
        "shippingAddress": {
            "addressLine1": "2150 St",
            "addressLine2": "Home Line 2",
            "city": "Bronx",
            "state": "NY",
            "zipCode": "10453",
            "addressSeqNumber": "1",
            "medFacilityIndicator": "N"
        }
    }

]
}

我的邮递员脚本是:

var jsonData = JSON.parse(responseBody);
var parties = jsonData.parties;

parties.forEach(function(data){

 if(data.shippingAddress!==null && data.shippingAddress.addressLine1 !== null ){

    postman.setEnvironmentVariable("addressLine1",data.shippingAddress.addressLine1);

}

我收到以下错误:

"Error running tests for results: TypeError: Cannot read property 'addressLine1' of null"

1 个答案:

答案 0 :(得分:1)

你可以试试这个,我稍微修改了你的代码但是这样可以工作:

var parties  = pm.response.json().parties

for(i = 0; i < parties.length; i++) {
    if(parties[i].shippingAddress !== null) {
        pm.environment.set("addressLine1", parties[i].shippingAddress.addressLine1)
    }
}

我在本地使用您提供的Schema进行了测试,并将2150 St写入了我的环境文件。

您发布的架构似乎并不完整,我认为 parties数组的shippingAddress属性为{{1}或者它是一个包含null详细信息的对象 - 我可能错了,但我无法理解您发布的数据。

我不认为你在shippingAddress语句中搜索的内容是正确的,并且它不会按照你的方式工作,因为如果第一个条件为null(就像你的回复数据一样)它不会满足第二个条件,因为对象不会出现在那里,而if引用总会显示错误。

或者你可以像这样使用你的代码:

shippingAddress.addressLine1