我正在使用avj with postman进行json模式验证。效果很好,但是对于整个架构验证,它只给我一个失败/通过结果,而不是确切的失败键/值对:
var Ajv = require('ajv'),
ajv = new Ajv({logger: console}),
schema = {
"properties": {
"data" : {
"type": "object",
"properties" : {
"categories" : {
"type": "array",
"items" : [
{"type": "object",
"properties" : {
"id": {"type": "number"},
"ref": {"type": ['null', 'string']},
"parent_id": {"type": ['null', 'number']},
"image": {"type": ['null', 'string']},
...
pm.test('Schema is valid', function() {
var data = pm.response.json()['data'];
pm.expect(ajv.validate(schema, {data: data})).to.be.true;
});
如何让avj / postman返回完全错误的密钥/配对验证?
要使其正常工作,必须像这样声明avj对象:
var Ajv = require('ajv'),
ajv = new Ajv({logger: console,
allErrors: true,
verbose: true
}),
答案 0 :(得分:2)
有一个ajv.errors
对象,其中包含信息。
https://github.com/epoberezkin/ajv#validation-errors
例如,通过在pm.expect()
语句中添加类似的内容,它应该在Postman Tests Results中显示错误的消息部分:
pm.expect(ajv.validate(ajv.validate(schema, {data: data}), JSON.stringify(ajv.errors[0].message)).to.be.true;
这只会显示数组中的第一个对象,因此,如果要遍历该数据,则需要以其他方式捕获它。
答案 1 :(得分:0)
在控制台中打印错误消息的正确方法是通过向validate()添加一个额外的参数。 首先在Postman脚本测试开始时声明一个“ printErrors”函数:
function printErrors(ajv){
if(ajv.errors !== null){
console.log(JSON.stringify(ajv.errors[0]));
}
}
然后添加一个电话进行验证,如下所示:
var ajv = new Ajv({logger: console,
allErrors: true,
verbose: true
}),
yourData = {"your Data"}
yourSchema = {"your schema"};
pm.test('Schema is valid', function() {
pm.expect(ajv.validate(schema, yourData), printErrors(ajv)).to.be.true;
});