使用 ajv 验证 json 架构时出现错误 type/value
Getting error type/value when validating json schema with ajv
我正在尝试使用 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
它应该提供一个错误。
看起来很简单,我做错了什么?
您需要将错误传递给 ajv.errorsText()
:
ajv.errorsText(validate.errors)
如果您使用 ajv.validate
.
方法,如果没有参数,它会 return 错误文本
见https://github.com/epoberezkin/ajv#errorstextarrayobject-errors--object-options---string
我正在尝试使用 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
它应该提供一个错误。
看起来很简单,我做错了什么?
您需要将错误传递给 ajv.errorsText()
:
ajv.errorsText(validate.errors)
如果您使用 ajv.validate
.
见https://github.com/epoberezkin/ajv#errorstextarrayobject-errors--object-options---string