Проверка схемы массива почтальона - PullRequest
2 голосов
/ 08 июля 2019

У меня проблема с проверкой схемы json массива в почтальоне.

var schema = {
    "type": "array",
    "items": [{
         "id": {
            "type":"long"
             },
         "name": {
             "type":"string"
             },
         "email": {
             "type":"string"
            }
    }]
};


pm.test('Response schema type nodes verification', function() {
  pm.expect(tv4.validate(pm.response.json(), schema)).to.be.true;
});

И тело ответа:

[
    {
        "id": 1,
        "name": "test1",
        "email": "a@a.com"
    },
    {
        "id": 2,
        "name": "test2",
        "email": "a@a.com"
    },
 .
 .
 .
]

Я всегда сдавал результат. Также я попробовал с удаленным [].

Где проблема?

Ответы [ 2 ]

2 голосов
/ 08 июля 2019

Используемая схема неверна, вам нужно определить тип элемента в массиве как object.Правильная схема JSON будет выглядеть следующим образом:

var schema = {
    "type": "array",
    "items": [{
        type: "object",
        properties:{
         "id": {
            "type":"integer"
             },
         "name": {
             "type":"string"
             },
         "email": {
             "type":"string"
            }
        }
    }]
};


pm.test('Response schema type nodes verification', function() {
  pm.expect(tv4.validate(pm.response.json(), schema)).to.be.true;
});

Обратите внимание, что в схеме JSON есть только 2 числовых типа: integer и number.Нет типа как long.

1 голос
/ 08 июля 2019

Вы также можете использовать Ajv , теперь оно включено в нативные приложения Postman и проект активно поддерживается:

var Ajv = require("ajv"),
    ajv = new Ajv({logger: console}),
    schema = {
        "type": "array",
        "items": {
            "type": "object",
            "properties": {
                "id": { "type": "integer" },
                "name": { "type": "string" },
                "email": { "type": "string" }
            }  
        }
    };


pm.test("Schema is valid", function() {
        pm.expect(ajv.validate(schema, pm.response.json())).to.be.true;
});
...