Как проверить, что узел, который может содержать ноль или строку в теле ответа, использует Postman? - PullRequest
0 голосов
/ 27 марта 2019

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

Пример тела ответа 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 будет содержать тольконулевой или строковый тип данных, и он не будет возвращать другие типы данных, такие как 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 Ответ

1 голос
/ 27 марта 2019

Я считаю, что с оператором || прямого пути нет, но вы можете проверить с типами данных.Поскольку 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 Schema Validator.

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;
    }
});

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

...