我需要验证针对JSON模式的响应。问题是即使模式有效,它也总是失败。
{
"items": [
{
"uuid": "f68ad4ba-a11e-485d-a2d7-17b9b07bd8d3",
"name": "Code",
"type": "app_code",
"description": "Code 1",
"content_type": "application/javascript",
"audit": {
"created_date": "2017-11-02T00:16:58.000Z",
"created_by": "e7c97dc1-08eb-45ef-b883-d100553bac5c"
}
},
{
"uuid": "3c9e59b0-f6c7-4788-8a14-0b3e99fc4306",
"name": "Object demo 2",
"type": "app_code",
"description": "Object demo 2 description",
"content_type": "application/javascript",
"audit": {
"created_date": "2017-11-02T13:48:22.000Z",
"created_by": "e7c97dc1-08eb-45ef-b883-d100553bac5c"
}
},
{
"uuid": "e2f54e6c-a158-4f43-a332-1c99bb76684e",
"name": "toolbox_test_results",
"type": "toolbox_tests",
"description": "This is snapshots for React-OSS Toolbox",
"content_type": "application/json",
"audit": {
"created_date": "2017-11-07T11:29:02.000Z",
"created_by": "e7c97dc1-08eb-45ef-b883-d100553bac5c"
}
}
],
"metadata": {
"total": 124,
"count": 3
},
"links": [
{
"rel": "self",
"href": "http://microsvcs.star2star.net:10010/users/e7c97dc1-08eb-45ef-b883-d100553bac5c/objects?load_content=false&limit=3&offset=0"
},
{
"rel": "first",
"href": "http://microsvcs.star2star.net:10010/users/e7c97dc1-08eb-45ef-b883-d100553bac5c/objects?load_content=false&limit=3&offset=0"
},
{
"rel": "next",
"href": "http://microsvcs.star2star.net:10010/users/e7c97dc1-08eb-45ef-b883-d100553bac5c/objects?load_content=false&limit=3&offset=3"
},
{
"rel": "last",
"href": "http://microsvcs.star2star.net:10010/users/e7c97dc1-08eb-45ef-b883-d100553bac5c/objects?load_content=false&limit=3&offset=123"
}
]
}
我在Postman中使用以下代码进行验证:
//定义JSON模式
const objectSchema = {
"items": [
{
"audit": {
"created_by": "string",
"created_date": "string",
"updated_by": "string",
"updated_date": "string"
},
"content": {},
"content_type": "string",
"description": "string",
"name": "string",
"type": "string",
"uuid": "string"
}
],
"links": [
{
"href": "string",
"rel": "string",
"templated": true
}
],
"metadata": {}
};
pm.test("JSON schema validation", function() {
var responseData = JSON.parse(responseBody);
var result = tv4.validate(responseData, objectSchema, false, true);
if (result !== true) {
console.log('Schema validation failed:', tv4.error);
}
pm.expect(result).to.be.true;
console.log(JSON.stringify(result));
});
如何在控制台中获得详细的错误(例如:哪个字段类型错误或缺失(?控制台的实际错误:
message:"Unknown property (not in schema)"
name:"ValidationError"
type:"Error
"预先感谢您的答案!
在 @pavlo的评论上详细说明:
在您的测试中:
pm.test("JSON schema validation", function() {
var responseData = JSON.parse(responseBody);
var result = tv4.validate(responseData, objectSchema, false, true);
if (result !== true) {
console.log('Schema validation failed:', tv4.error);
}
pm.expect(result).to.be.true;
console.log(JSON.stringify(result));
});
该行var responseData = JSON.parse(responseBody);
应替换为:
var responseData = pm.response.json();
另外,从这个答案中,您可以添加以下行,以获取有关模式失败位置的更多信息:
console.log(tv4.error.dataPath);