Проблема с проверкой схемы с помощью Почтальона - PullRequest
2 голосов
/ 31 марта 2020

Тело моего запроса:

[
  {
    "postId": 1,
    "id": 1,
    "name": "name abc",
    "email": "Eliseo@gardner.biz",
    "body": "something"
  },
...
]

Я пытаюсь проверить его, как показано ниже:

var schema = {
  "type": "array",
  "properties": {
    "postId": {
      "type": "integer"
    },
    "id": {
      "type": "integer"
    },
     "name": {
      "type": "string"
    },
    "email": {
      "type": "string",
      "pattern": "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$"
    },
    "body": {
      "type": "string"
    }
  },
  "required": [
    "postId",
    "id",
    "name",
    "email",
    "body"
  ]
};

pm.test('Schemat jest poprawny', function() {
  pm.expect(tv4.validate(jsonData, schema)).to.be.true;
});

Тест в порядке, даже если я изменяю, например, тип идентификатора для строки или неправильный шаблон электронной почты.

Что не так с этим кодом?

1 Ответ

1 голос
/ 31 марта 2020

Я бы порекомендовал отойти от tv4 для проверки схем и использовать встроенную функцию jsonSchema , так как она использует AJV .

Кроме этого, ваш схема выглядела неправильно и пропускала проверку на object, похоже, она делала это на array.

Это может помочь вам:

let schema = {
    "type": "array",
    "items": {
        "type": "object",
        "required": [
            "postId",
            "id",
            "name",
            "email",
            "body"
        ],
        "properties": {
            "postId": {
                "type": "integer"
            },
            "id": {
                "type": "integer"
            },
            "name": {
                "type": "string"
            },
            "email": {
                "type": "string",
                "pattern": "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$"
            },
            "body": {
                "type": "string"
            }
        }
    }
}

pm.test("Schemat jest poprawny", () => {
    pm.response.to.have.jsonSchema(schema)
})
...