json 架构的 ajv 验证在邮递员中是错误的
ajv validation of json schema is wrong in postman
我有 JSON:
{
"data": {
"regex": "some regex",
"validationMessage": "some validation message"
}
}
我使用 this tool 构建 json 架构。
初始化如下:
var Ajv = require('ajv'),
ajv = new Ajv({logger: console}),
schema = {
"definitions": {},
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://example.com/root.json",
"type": "object",
"properties": {
"data": {
"$id": "#/properties/data",
"type": "object",
"properties": {
"regex": {
"$id": "#/properties/data/properties/regex",
"type": "string",
"pattern": "^(.*)$"
},
"validationMessage": {
"$id": "#/properties/data/properties/validationMessage",
"type": "string",
"pattern": "^(.*)$"
}
}
}
}
};
然后我想检查 json 架构是否有效
pm.test('Schema is valid', function() {
pm.expect(ajv.validate(schema, {alpha: 123})).to.be.true;
});
我看到测试通过了。
怎么了?为什么架构有效?
此外,我将用 JSON.parse(responseBody)
替换 {alpha: 123}
你可以试着把它改成这样:
var Ajv = require('ajv'),
ajv = new Ajv({logger: console, allErrors: true}),
schema = {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"required": [
"regex",
"validationMessage"
],
"properties": {
"regex": {
"type": "string",
"pattern": "^(.*)$"
},
"validationMessage": {
"type": "string",
"pattern": "^(.*)$"
}
}
}
}
};
pm.test('Schema is valid', function() {
pm.expect(ajv.validate(schema, { alpha: 123 }), JSON.stringify(ajv.errors)).to.be.true;
});
我将 allErrors
选项添加到 Ajv
并在测试中公开了这些选项。我还稍微修改了您的模式以添加对象所需的键。
我测试了这将是一个在测试中硬编码的对象,但也有模拟响应。
我有 JSON:
{
"data": {
"regex": "some regex",
"validationMessage": "some validation message"
}
}
我使用 this tool 构建 json 架构。
初始化如下:
var Ajv = require('ajv'),
ajv = new Ajv({logger: console}),
schema = {
"definitions": {},
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://example.com/root.json",
"type": "object",
"properties": {
"data": {
"$id": "#/properties/data",
"type": "object",
"properties": {
"regex": {
"$id": "#/properties/data/properties/regex",
"type": "string",
"pattern": "^(.*)$"
},
"validationMessage": {
"$id": "#/properties/data/properties/validationMessage",
"type": "string",
"pattern": "^(.*)$"
}
}
}
}
};
然后我想检查 json 架构是否有效
pm.test('Schema is valid', function() {
pm.expect(ajv.validate(schema, {alpha: 123})).to.be.true;
});
我看到测试通过了。 怎么了?为什么架构有效?
此外,我将用 JSON.parse(responseBody)
{alpha: 123}
你可以试着把它改成这样:
var Ajv = require('ajv'),
ajv = new Ajv({logger: console, allErrors: true}),
schema = {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"required": [
"regex",
"validationMessage"
],
"properties": {
"regex": {
"type": "string",
"pattern": "^(.*)$"
},
"validationMessage": {
"type": "string",
"pattern": "^(.*)$"
}
}
}
}
};
pm.test('Schema is valid', function() {
pm.expect(ajv.validate(schema, { alpha: 123 }), JSON.stringify(ajv.errors)).to.be.true;
});
我将 allErrors
选项添加到 Ajv
并在测试中公开了这些选项。我还稍微修改了您的模式以添加对象所需的键。
我测试了这将是一个在测试中硬编码的对象,但也有模拟响应。