Как проверить, может ли узел, который может содержать значение null или строку в теле ответа, используя Postman?

#javascript #testing #automated-tests #postman #chai

#javascript #тестирование #автоматизированные тесты #postman #чай

Вопрос:

Мне нужно проверить, является ли конкретный узел в теле ответа API нулевым или строковым. Как это делается с использованием ChaiJS в тестах postman?

Пример тела ответа API:

 [
 {
   "exercise_num": "1",
   "expire_date": "2019-03-11T16:31:17.935Z",
   "created_at": "2019-03-15T11:44:35.698Z"
 },
 {
    "exercise_num": "2",
    "expire_date": null,
    "created_at": "2019-03-15T11:44:38.363Z"
 }
]
  

Я хотел бы убедиться, что узел expire_date в приведенном выше примере тела ответа API будет содержать либо только null, либо строковый тип данных, и он не вернет никаких других типов данных, таких как int и т.д.

Я попробовал следующее:

 var jsonData = JSON.parse(responseBody);
pm.test('All expire_date contains either string or null', () => {
for (i = 0; i < jsonData.length; i  ) {
if(jsonData[i].expire_date === null){
tests["expire_date is null"] = true;
}
else{
    pm.expect(jsonData[i].expire_date).to.be.a('string');
}
}
});
  

Тест пройден.

Я ожидаю, что можно сделать что-то подобное:

 pm.test('All expire_date contains string', () => {
for (i = 0; i < jsonData.length; i  ) {
    pm.expect(jsonData[i].expire_date).to.be.a('string' || null);
}
});
  

Ответ №1:

Я полагаю, что прямого способа с || operator нет, хотя вы можете проверить с помощью типов данных. Поскольку null это object тип в JavaScript, напишите тестовый пример следующим образом:

 var jsonData = JSON.parse(responseBody);

pm.test('All expire_date contains string', () => {

    for (i = 0; i < jsonData.length; i  ) {            
        pm.expect(typeof jsonData[i].expire_date).to.be.oneOf(['string', 'object']);
    }
});
  

Вероятно, это простой способ, и его можно использовать при простых проверках. Тем не менее, я бы рекомендовал вам использовать второй способ, то есть использовать Самый быстрый валидатор схемы JSON.

 var Ajv = require('ajv'),
ajv = new Ajv({logger: console}),
schema = {
    "properties": {
        "expireDate": {
            "type": ["string","null"]
        }
    }
};

var jsonData = JSON.parse(responseBody);

pm.test('All expire_date contains string', function() {
    for (i = 0; i < jsonData.length; i  ) {
        pm.expect(ajv.validate(schema, {expireDate: jsonData[i].expire_date})).to.be.true;
    }
});
  

Если вы хотите проверить это в нескольких запросах, поместите schema на уровень коллекции.

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

1. Я попытался использовать 2-й способ, но postman выдает следующую ошибку: Произошла ошибка при оценке тестового сценария: Ошибка: Не удается найти модуль ‘ajv’

2. @NoorYeaserKhan: Проверьте с той же версией, можете ли вы попробовать понизить версию до v 6.7.4 ?

3. Я не знаю, что произошло ранее. Теперь он отлично работает с v.7.0.7. Так что большое вам спасибо за ваш ответ.