AJV проверка схемы json неправильно в почтальоне - PullRequest
1 голос
/ 13 января 2020

У меня есть JSON:

{
    "data": {
        "regex": "some regex",
        "validationMessage": "some validation message"
    }
}

Я использую этот инструмент для построения 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;
});

И я вижу, тест прошел. Что не так? И почему схема действительна?

Далее я собираюсь заменить {alpha: 123} на JSON.parse(responseBody)

1 Ответ

1 голос
/ 13 января 2020

Вы можете попробовать изменить его на что-то вроде этого:

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 и выставил их в тесте. Я также немного изменил вашу схему, добавив необходимые ключи для объектов.

Я протестировал это будет объект, жестко закодированный в тесте, но также с поддельным ответом.

...