Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何使用错误消息中的邮递员返回键/值进行ajv验证 背景_Json_Validation_Postman - Fatal编程技术网

Json 如何使用错误消息中的邮递员返回键/值进行ajv验证 背景

Json 如何使用错误消息中的邮递员返回键/值进行ajv验证 背景,json,validation,postman,Json,Validation,Postman,我正在使用json模式验证。它工作得很好,但是它只为整个架构验证提供了一个失败/通过的结果,而不是确切的失败键/值对: var Ajv = require('ajv'), ajv = new Ajv({logger: console}), schema = { "properties": { "data" : { "type": "object",

我正在使用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;

});

问题: 如何让avj/postman返回完全错误的密钥/对验证

更新 要使其工作,avj对象必须这样声明:

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

存在保存信息的
ajv.errors
对象

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

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

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

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

function printErrors(ajv){
    if(ajv.errors !== null){
        console.log(JSON.stringify(ajv.errors[0]));    
    }
}
然后添加a调用以进行验证,如下所示:

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

您将在控制台框中看到日志。要打开它,你必须点击控制台按钮,从左边开始的第三个按钮

有一个
errors
对象保存信息-
pm.expect(ajv.validate(accessSchema,pm.response.json()),json.stringify(ajv.errors[0].message)).to.be.true不确定答案,但里面有东西可以暴露出来。太好了!如果你把你的评论作为一个答案,我会把它标记为正确的答案,我很想看看你是如何使用它的。任何与任何文章相关的链接都将不胜感激:)更好的输出是
JSON.stringify(ajv.errors[0])
-它提供了比归档消息更多的细节当然,我只是选择了一个可以告诉您实际问题的