tv4.validate всегда возвращает true.Даже если моя схема недействительна, например: var == "dummy" - PullRequest
2 голосов
/ 20 мая 2019

tv4.validate всегда будет возвращать true. Неважно, является ли схема допустимой JSON или просто фиктивной строкой. Я просматриваю stackoverflow для связанных проблем, и banUnknownProperties мне не помогает

Как я уже сказал, я даже пытался изменить переменную схемы на "dummy", а tv4 все еще не находит ошибку. Это мой первый пост на stackoverflow. Извините, если мой вопрос не ясен.

Действительный ответ будет следующим:

[
  {
    "dayOfWeek": "sunday",
    "openTime": "10:00:00",
    "closeTime": "14:00:00"
  },
  {
    "dayOfWeek": "monday",
    "openTime": "9:00:00",
    "closeTime": "16:00:00"
  },
  {
    "dayOfWeek": "tuesday",
    "openTime": "9:00:00",
    "closeTime": "16:00:00"
  },
  {
    "dayOfWeek": "wednesday",
    "openTime": "9:00:00",
    "closeTime": "16:00:00"
  },
  {
    "dayOfWeek": "thursday",
    "openTime": "9:00:00",
    "closeTime": "16:00:00"
  },
  {
    "dayOfWeek": "friday",
    "openTime": "9:00:00",
    "closeTime": "16:00:00"
  },
  {
    "dayOfWeek": "saturday",
    "openTime": "7:00:00",
    "closeTime": "19:00:00"
  }
]

Я получил свою переменную схемы, используя https://jsonschema.net/, которая была предложена несколькими потоками. Вы можете вставить действительный ответ и вывести этот JSON в SChema. Я не собираюсь предоставлять здесь свою схему для экономии места.

Вот мой тестовый код:

var data = JSON.parse(responseBody);
var schema =pm.variables.get("getHoursSchema"); // copy paste schema from https://jsonschema.net/ and assigned to 'getHoursSchema' environment variable

tests["Valid 'Get business hours' schema"] = tv4.validate(data, schema, false, true);  
console.log("Schema error description, if any:" + tv4.error);

Фактический ответ:

{
    "error": {
        "name": "JsonWebTokenError",
        "message": "jwt malformed"
    }
}

И тв4 здесь не видит никаких ошибок

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

@ Предложение DieGraueEminenz может быть полезным, но я думаю, что там также может происходить что-то еще, мне любопытно, как вы можете получить ссылку на «JsonWebTokenError» с тем, что вы делаете, вы должны это исследовать.

Но что касается вашей проблемы со схемой, давайте удалим несколько неизвестных, используя следующий код в сценариях предварительного запроса или в тестовом сценарии фиктивного запроса (например, GET google.com)

var data = [
  {
    "dayOfWeek": "sundayX",
    "openTime": "10:00:00",
    "closeTime": "14:00:00"
  },
  {
    "dayOfWeek": "monday",
    "openTime": "9:00:00",
    "closeTime": "16:00:00"
  }
];

const schema = {
  "definitions": {},
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "array",
  "items": {
    "type": "object",
    "required": [ "dayOfWeek", "openTime", "closeTime" ],
    "properties": {
      "dayOfWeek":  { "enum": [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday",  ] },
      "openTime": { "type": "string", "pattern": "^\\d+:\\d\\d:\\d\\d$" },
      "closeTime": { "type": "string", "pattern": "^\\d+:\\d\\d:\\d\\d$" },
    }
  }
};

const result = tv4.validateResult(data, schema);  
console.log("Schema result:", result);

Я переработал схему, которую вы получаете от https://jsonschema.net/, (которая на самом деле только проверяет, есть ли у вас строки, и больше ничего). Перечисленное выше значение для dayOfWeek лучше проверяет, значения времени теперь должны быть [n] n: nn: nn, и я удалил кучу лишних битов, которые вам не нужны.

Также я бы использовал метод tv4.validateResult(...), потому что он дает вам гораздо больше информации об ошибках.

Приведенный выше пример вывода

postman console

, чтобы выявить преднамеренную ошибку в первом элементе данных.

Как только вы начнете это делать, начните соединять данные из вашего ответа, и если вам нужно поделиться схемой с другими запросами, сохраните ее в глобальные значения с помощью

pm.globals.set("schemaJSON",JSON.stringify(schema));

и получитеэто следующим образом

const schemaJSON = pm.globals.has("schemaJSON") && pm.globals.get("schemaJSON");
const schema = schemaJSON && JSON.parse(schemaJSON);
0 голосов
/ 20 мая 2019

Переменные почтальона хранятся в виде строк. TV4 ожидает объект.

Так что просто попробуйте обернуть JSON.parse поверх вашего pm.variables.get:

var schema = JSON.parse(pm.variables.get("getHoursSchema")); 

С этим изменением я получил ошибку проверки схемы, как и ожидалось.

...