Как сделать проверку AJV, используя ключ / значение почтальона возврата в сообщении об ошибке - PullRequest
1 голос
/ 15 мая 2019

Фон

Я использую ajv с почтальоном для проверки схемы JSON. Он работает хорошо, однако он дает мне только один результат «сбой / проход» для всей проверки схемы, а не точную пару «ключ / значение»:

var Ajv = require('ajv'),
    ajv = new Ajv({logger: console}),
    schema = {
        "properties": {
                "data" : {
                     "type": "object",
                     "properties" : {
                            "categories" : {
                                   "type": "array",
                                   "items" : [
                                           {"type": "object",
                                            "properties" : {
                                                    "id": {"type": "number"},
                                                    "ref": {"type": ['null', 'string']},
                                                    "parent_id": {"type": ['null', 'number']},
                                                    "image": {"type": ['null', 'string']},
         ...

  pm.test('Schema is valid', function() {
    var data = pm.response.json()['data'];
    pm.expect(ajv.validate(schema, {data: data})).to.be.true;

});

enter image description here

Вопрос

Как сделать так, чтобы avj / почтальон возвращал неверный ключ / проверку пары?

обновление

Чтобы это работало, объект avj должен быть объявлен так:

var Ajv = require('ajv'),
ajv = new Ajv({logger: console,
            allErrors: true,
            verbose: true
}),

1 Ответ

2 голосов
/ 15 мая 2019

Существует объект ajv.errors, который содержит информацию.

https://github.com/epoberezkin/ajv#validation-errors

Например, добавив что-то подобное в оператор pm.expect(), он должен показатьсообщение часть ошибки в результатах тестов Почтальона:

pm.expect(ajv.validate(ajv.validate(schema, {data: data}), JSON.stringify(ajv.errors[0].message)).to.be.true;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...