使用ajv验证json模式时获取错误类型/值

ped*_*ete 3 json jsonschema ajv

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

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

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

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

export default viewSchema;
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

并使用mocha(使用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');
    });
});
Run Code Online (Sandbox Code Playgroud)

按照ajv github页面的指示,我希望我的测试失败,因为所需的类型是一个字符串,我提供了一个数字.但我得到的回应ajv.errorsText()No Errors应该提供错误的地方.

似乎这么简单,我做错了什么?

esp*_*esp 6

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

ajv.errorsText(validate.errors)
Run Code Online (Sandbox Code Playgroud)

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

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