#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 => ...)
или ES5pm.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
}
})