0

我需要针对 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

“提前谢谢你的回答!

4

1 回答 1

0

详细阐述@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);
于 2018-04-04T00:57:36.693 回答