【问题标题】:How to make ajv validation using postman return key/value in error message如何使用邮递员在错误消息中返回键/值进行 ajv 验证
【发布时间】:2019-08-19 16:15:53
【问题描述】:

背景

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

});

问题

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

更新

为此,必须像这样声明 avj 对象:

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

【问题讨论】:

  • 有一个 errors 对象保存信息 - pm.expect(ajv.validate(accessSchema, pm.response.json()), JSON.stringify(ajv.errors[0].message)).to.be.true; 不确定答案,但其中有一些东西可以公开。
  • 完美!如果您将评论作为答案,我会将其标记为正确
  • 会的,我很想看看你是如何使用它的。任何文章的链接将不胜感激:)

标签: json validation postman


【解决方案1】:

有一个ajv.errors 对象,它保存了信息。

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

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

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

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

【讨论】:

  • 更好的输出是JSON.stringify(ajv.errors[0]) - 它提供比提交消息更多的细节
  • 当然,我只是选择了能告诉你实际问题的那个?
【解决方案2】:

在控制台中打印错误消息的正确方法是在 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;
});

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

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2017-12-27
    • 1970-01-01
    • 2015-11-20
    • 2020-07-15
    • 2020-11-30
    相关资源
    最近更新 更多