我试图使用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(使用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
,它应该提供错误。
似乎很简单,我做错了什么?
答案 0 :(得分:5)
您需要将错误传递给ajv.errorsText()
:
ajv.errorsText(validate.errors)
如果使用方法ajv.validate
,如果没有参数,它将返回错误文本。
请参阅https://github.com/epoberezkin/ajv#errorstextarrayobject-errors--object-options---string