Не удалось проверить схему и правильно использовать дополнительные свойства

Я пытаюсь проверить мою схему JSON и использовать дополнительные Properties: false, чтобы подтвердить, что нет других свойств. Мой ответ выглядит примерно так:

[
  {
    "id": 1234567890987654,
    "email": "eemail@domain.com",
    "civility": 0,
    "firstname": "john",
    "lastname": "do",
    "function": null,
    "phone": null,
    "cellphone": null,
    "role": 1,
    "passwordws": "jdnfjnshn55fff5g8"
  },
  {
...}
]

В тестах почтальона, я добавляю это

var schema = {
    "type": "array",
    "properties": {
        "id": {"type":"number"},
        "email": {"type":"string"},
        "civility": {"type":"number"},
        "firstname": {"type":"string"},
        "lastname": {"type":"string"},
        "function": {"type":"string"},
        "cellphone": {"type":"string"},
        "role": {"type":"number"},
        "passwordws": {"type":"string"},
    },
    "additionalProperties": false,
    "required": ["id", "email", "civility", "role", "passwordws"]
};

var data = JSON.parse(responseBody);
var result = tv4.validateResult(data, schema);
tests["Valid schema"] = result.valid;

тест должен вернуть FAIL, потому что я удалил свойства "phone" из схемы, но тест по-прежнему выполняется корректно... Я попытался изменить схему на {тип: массив, свойства: {тип: объект, свойства {список свойств} extraProperties: false}} но test по-прежнему возвращает PASS вместо FAIL... есть идеи?

2 ответа

Решение

После некоторого теста и регистрации результата ошибка произошла из-за нулевого значения, которое я иногда получал в объектах. Я изменил схему, которую вы мне прислали

{
    "type": "array",
    "items": {
        "$ref": "#/definitions/MyObject"
    },

    "definitions": {
        "MyObject": {
            "type": "object",
            "required": ["id", "email", "civility", "role", "passwordws"],
            "properties": {
                "id": {
                    "type": "integer"
                },
                "email": {
                    "type": "string"
                },
                "civility": {
                    "type": "integer"
                },
                "firstname": {
                    "type": ["string", "null"]
                },
                "lastname": {
                    "type": ["string", "null"]
                },
                "function": {
                    "type": ["string", "null"]
                },
                "phone": {
                    "type": ["string", "null"]
                },
                "cellphone": {
                    "type": ["string", "null"]
                },
                "role": {
                    "type": "integer"
                },
                "passwordws": {
                    "type": "string"
                }
            },
            "additionalProperties": false
        }
    }
};

и теперь я могу правильно проверить схему.

Большое спасибо

Ваш ответ представляет собой массив объектов, и я увидел:

  • объект массива не определен

  • идентификатор типа определяют с помощью "числа" вместо "целого"

Попробуй это:

var schema = {
  "type":"array",
  "items": { "$ref": "#/definitions/MyObject" }

  "definitions" : {
        "MyObject" : {
          "type":"object",
            "required" : ["id", "email", "civility", "role", "passwordws"],
            "properties": {
                "id": {"type":"integer"},
                "email": {"type":"string"},
                "civility": {"type":"integer"},
                "firstname": {"type":"string"},
                "lastname": {"type":"string"},
                "function": {"type":"string"},
                "phone": {"type":"string"},
                "cellphone": {"type":"string"},
                "role": {"type":"integer"},
                "passwordws": {"type":"string"}
            },
           "additionalProperties": false,
        },
    },
};
Другие вопросы по тегам