Как проанализировать и протестировать ответ как ключ / значение из массива

#javascript #arrays #json #postman

#javascript #массивы #json #почтальон

Вопрос:

Я получил следующий ответ в формате json:

 {
"vin": "BAUV114MZ18091106",
"users": [
    {
        "role": "PRIMARY_USER",
        "status": "ACTIVE",
        "securityLevel": "HG_2_B",
        "firstName": "Etienne",
        "lastName": "Rumm",
        "nickName": "BastieW",
        "isInVehicle": false
    },
    {
        "role": "SECONDARY_USER",
        "status": "ACTIVE",
        "securityLevel": "HG_2_B",
        "firstName": "Test",
        "lastName": "DEde",
        "isInVehicle": false
    }
]
}
  

Я хочу протестировать ключ «isInVehicle» и пройти тест, если это true, и не пройти тест, если это false.

Я пытался сделать это с помощью следующего тестового кода, но это не сработало, тесты всегда проходят, независимо от того, какой ответ я получал.

 pm.test("User is in Vehicle", () => {
_.each(pm.response.json(), (arrItem) => {
    if (arrItem.isInVehicle === 'true') {
        throw new Error(`Array contains ${arrItem.isInVehicle}`)
    }
})
});
  

Есть ли какие-либо идеи о том, как решить мою проблему?

Комментарии:

1. Если pm.response.json() в вашем примере задан json, то вы не выполняете итерацию по массиву users. Выполните следующее в вашем each-statement _.each(pm.response.json().users => ...) или ES5 pm.response.json().users.forEach(user => {...})

Ответ №1:

Я думаю, что вы выполняете итерацию через object (корневой объект вашего ответа) вместо user array . Пересмотренная версия будет:

 var users = pm.response.users;
_.each(users, (arrItem) => {
    if (arrItem.isInVehicle) {
        //Do something  if isInVehicle is true 
    }
})
});
  

Ответ №2:

Вы можете сделать это, используя свойства массива,

some — возвращает true, если хотя бы одно соответствует условию

every — возвращает true, если все элементы соответствуют условию

 const response = {
  "vin": "BAUV114MZ18091106",
  "users": [{
      "role": "PRIMARY_USER",
      "status": "ACTIVE",
      "securityLevel": "HG_2_B",
      "firstName": "Etienne",
      "lastName": "Rumm",
      "nickName": "BastieW",
      "isInVehicle": false
    },
    {
      "role": "SECONDARY_USER",
      "status": "ACTIVE",
      "securityLevel": "HG_2_B",
      "firstName": "Test",
      "lastName": "DEde",
      "isInVehicle": false
    }
  ]
};


pm.test("User is in Vehicle", () => {
  // I'm assuming you are looking for atleast one match
  const atleastOneMatch = response.users.some(user => user.isInVehicle);
  // if you are looking for all should match, uncomment the following code
  // const allShouldMatch = response.users.every(user => user.isInVehicle);
  
  if(atleastOneMatch) {
    // do your stuffs here
  }
})