如何在错误消息中使用邮递员返回键/值进行AVJ验证

时间:2019-05-15 11:06:06

标签: json validation postman

背景

我正在使用avj with postman进行json模式验证。效果很好,但是对于整个架构验证,它只给我一个失败/通过结果,而不是确切的失败键/值对:

var Ajv = require('ajv'),
    ajv = new Ajv({logger: console}),
    schema = {
        "properties": {
                "data" : {
                     "type": "object",
                     "properties" : {
                            "categories" : {
                                   "type": "array",
                                   "items" : [
                                           {"type": "object",
                                            "properties" : {
                                                    "id": {"type": "number"},
                                                    "ref": {"type": ['null', 'string']},
                                                    "parent_id": {"type": ['null', 'number']},
                                                    "image": {"type": ['null', 'string']},
         ...

  pm.test('Schema is valid', function() {
    var data = pm.response.json()['data'];
    pm.expect(ajv.validate(schema, {data: data})).to.be.true;

});

enter image description here

问题

如何让avj / postman返回完全错误的密钥/配对验证?

更新

要使其正常工作,必须像这样声明avj对象:

var Ajv = require('ajv'),
ajv = new Ajv({logger: console,
            allErrors: true,
            verbose: true
}),

2 个答案:

答案 0 :(得分:2)

有一个ajv.errors对象,其中包含信息。

https://github.com/epoberezkin/ajv#validation-errors

例如,通过在pm.expect()语句中添加类似的内容,它应该在Postman Tests Results中显示错误的消息部分:

pm.expect(ajv.validate(ajv.validate(schema, {data: data}), JSON.stringify(ajv.errors[0].message)).to.be.true;

这只会显示数组中的第一个对象,因此,如果要遍历该数据,则需要以其他方式捕获它。

答案 1 :(得分:0)

在控制台中打印错误消息的正确方法是通过向validate()添加一个额外的参数。 首先在Postman脚本测试开始时声明一个“ printErrors”函数:

function printErrors(ajv){
    if(ajv.errors !== null){
        console.log(JSON.stringify(ajv.errors[0]));    
    }
}

然后添加一个电话进行验证,如下所示:

var ajv = new Ajv({logger: console,
        allErrors: true,
        verbose: true
}),
yourData = {"your Data"}
yourSchema = {"your schema"};
pm.test('Schema is valid', function() {
    pm.expect(ajv.validate(schema, yourData), printErrors(ajv)).to.be.true;
});

您将在控制台框中看到日志。要打开它,您必须单击控制台按钮,第三个按钮从左侧开始。 enter image description here