#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. Так что большое вам спасибо за ваш ответ.