Я уверен, что это можно улучшить, но работает следующее:
var jsonData = JSON.parse(responseBody);
var schema = {
"type": "object",
"properties": {
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"field1": { "type": "string", "pattern": uuid_format },
"field2": { "type": "string", "pattern": date_format },
"field3": { "type": "string" },
"field4": { "type": "string", "enum": ["ACTIVE", "INACTIVE"]},
}
},
"pages": { "type": ["string", "null"]
}
}
};
var result = tv4.validateMultiple(jsonData, schema);
if (result.valid){
pm.test("Contract: JSON Response has valid schema"), setTestStatus;
} else {
for (var i = 0; i < result.errors.length; i++) {
pm.test('JSON Response is INVALID ' + result.errors[i].dataPath +" " + result.errors[i].message, setTestStatus);
}
}
function setTestStatus() {
pm.expect(result.valid).to.be.true;
}
Мне не удалось получить правильное состояние прохождения / неудачи с ajv, которое я хотел бы использовать вместо tv4.Я уверен, что это как-то связано с моим регулярным выражением или чем-то подобным, даже несмотря на то, что я проверял значение шаблона / ответа регулярного выражения и схему с онлайн-валидаторами.Но здесь все равно.
var uuid_format = '/^[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}$/i'
var Ajv = require('ajv'),
ajv = new Ajv({logger: console, allErrors: true}),
var jsonData = JSON.parse(responseBody);
var schema = {...see above...}
var valid = ajv.validate(schema, jsonData);
if(valid){
pm.test('Contract: JSON Response is valid', setTestStatus);
} else {
for (var i = 0; i < ajv.errors.length; i++) {
pm.test('JSON Response is INVALID ' + ajv.errors[i].dataPath +" " + ajv.errors[i].message, setTestStatus);
}
}
function setTestStatus() {
pm.expect(result.valid).to.be.true;
}