如何为来自企业应用程序的嵌套 JSON 响应编写测试

How to write a test for nested JSON response from enterprise application

我正在尝试使用 Postman 作为测试工具来验证我们的客户在我们的主系统中是否都有邮寄地址。由于其结构,我无法深入研究 JSON。每个响应都是一个数组结构,具有单个“节点”,没有要寻址的“head 属性”。

示例JSON:


[
  {
    "ID": "cmd_org_628733899",
    "organization": {
      "name": "FULL POTENTIAL",
      "accountStatusCode": "1",
      "accountStatusDescription": "OPEN"
    },
    "location": [
      {
        "locality": "LITTLE ROCK",
        "locationType": "MAILING"
      },
      {
        "locality": "BIG ROCK",
        "locationType": "LOCATION"
      }
    ]
  }
]

现有的测试代码:

pm.test("Check for a Mailing Address", function () {
   // Parse response body
   var jsonData = pm.response.json();

   // Find the array index for the MAILING Address
   var mailingLocationIndex = jsonData.location.map(
          function(filter) {
             return location.locationType; 
          }
    ).indexOf('MAILING'); 

   // Get the mailing location object by using the index calculated above
   var mailingLocation = jsonData.location[mailingFilterIndex];

   // Check that the mailing location exists
   pm.expect(mailingLocation).to.exist;

});

Error message: TypeError: Cannot read property 'map' of undefined

我知道我必须迭代到外部数组中的节点 (0),然后深入到嵌套位置数组以找到 locationType = Mailing 的条目。

我无法通过外部阵列。我是 JavaScript 和 JSON 解析的新手 - 我是 COBOL 程序员。

别的什么都不知道,我会说你是这个意思

pm.test("Check for a Mailing Address", function () {
    var mailingLocations = pm.response.json().location.filter(function (item) {
        return item.locationType === 'MAILING';
    });
    pm.expect(mailingLocations).to.have.lengthOf(1);
});

您想过滤掉所有具有 MAILING 类型的位置,并且应该恰好有一个或至少一个,具体取决于。

是否 pm.response.json() 实际上 returns 你在问题中显示的对象是不可能从我的立场上说的。


在现代 JS 中,上面的内容更短:

pm.test("Check for a Mailing Address", function () {
    var mailingLocations = pm.response.json().location.filter(item => item.locationType === 'MAILING');
    pm.expect(mailingLocations).to.have.lengthOf(1);
});