2017-08-14 37 views
0

我试图使用json模式来验证api的json。当使用ajv验证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; 

,并使用摩卡(与摩卡奇诺)测试输出

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的指示我期望我的测试失败,因为类型要求d是一个字符串,我提供了一个数字。但是我从ajv.errorsText()得到的响应是No Errors,它应该提供一个错误。

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

回答

2

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

ajv.errorsText(validate.errors) 

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

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

+0

谢谢,主文件说,'如果执行console.log(ajv.errorsText())(有效!);'所以我与打算。 – pedalpete

+0

是的,在它使用ajv.validate的情况下。需要在前面的示例中添加errorsText。 – esp