【问题标题】:Getting error type/value when validating json schema with ajv使用 ajv 验证 json 模式时获取错误类型/值
【发布时间】:2018-01-22 00:49:43
【问题描述】:

我正在尝试使用 json 模式来验证 api 的 json。

我找到了 ajv 库,它似乎是 node.js 中最受欢迎的。

刚刚获得基础知识,我已将架构定义为

const viewSchema = {
    "type": "object",
    "properties":{
        "title": {"type": "string"}
    }
}

export default viewSchema;

然后我将它导入到我的验证器中

import Ajv from 'ajv';

import viewSchema from './viewSchema';
const ajv = Ajv({allErrors: true});
let validate = ajv.compile(viewSchema);

const validateView = viewJson => {
    var isValid = validate(viewJson);
    console.log('------ text',ajv.errorsText(), isValid)
    if(isValid) return true;
    return ajv.errorsText();
}

export default validateView;

并使用 mocha (with mochaccino) 测试输出

describe('validate view', () => {
    it('should error if title is not a string', () => {
        console.log('-----------',validateView({"title":122}))
        expect(validateView({"title":122}).errors).toContain('should be string');
    });
});

按照ajv github page 的指示,我希望我的测试会失败,因为所需的类型是字符串并且我提供了一个数字。但是我从ajv.errorsText() 得到的响应是No Errors,它应该提供一个错误。

看起来很简单,我做错了什么?

【问题讨论】:

    标签: json jsonschema ajv


    【解决方案1】:

    您需要将错误传递给ajv.errorsText()

    ajv.errorsText(validate.errors)
    

    如果你使用方法ajv.validate,如果没有参数,它会返回错误文本。

    https://github.com/epoberezkin/ajv#errorstextarrayobject-errors--object-options---string

    【讨论】:

    • 谢谢,主要文档上写着if (!valid) console.log(ajv.errorsText());,所以我就这么做了。
    • 是的,在它使用 ajv.validate 的情况下。需要在前面的例子中添加errorsText。
    猜你喜欢
    • 2017-04-29
    • 2018-02-03
    • 2020-07-15
    • 2020-07-14
    • 1970-01-01
    • 2019-06-10
    • 2016-08-23
    • 2018-06-05
    • 2018-10-21
    相关资源
    最近更新 更多