tv4.validate 总是 return 正确。即使我的模式无效,即:var == "dummy"
tv4.validate always return true. Even if my schema not valid i.e.: var == "dummy"
tv4.validate 将始终 return 为真。无论架构是否有效 JSON 甚至只是虚拟字符串。我在 Whosebug 上浏览相关问题,banUnknownProperties 对我没有帮助
正如我所说,我什至尝试将架构变量更改为 "dummy",但 tv4 仍然没有发现错误。那是我在 Whosebug 上的第一个 post。抱歉,如果我的问题不清楚。
有效回复如下
[
{
"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 推断为架构。我不会在这里提供我的模式来保存 space。
这是我的测试代码:
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"
}
}
而且tv4这里没有看到任何错误
Postman 变量存储为字符串。
TV4 需要一个对象。
所以试着用 JSON.parse 覆盖你的 pm.variables.get:
var schema = JSON.parse(pm.variables.get("getHoursSchema"));
进行此更改后,我遇到了预期的模式验证错误。
@DieGraueEminenz 的建议可能会有所帮助,但我认为那里可能还会发生其他事情,我很好奇你如何通过你正在做的事情获得对 "JsonWebTokenError" 的引用,你应该调查那个。
但是关于您的架构问题,让我们通过在 pre-request 或虚拟请求的测试脚本(例如 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(...)
方法,因为它可以为您提供更多有关错误的信息。
上面的例子输出是
找出数据第一项中的故意错误。
完成后,开始通过响应连接数据,如果需要与其他请求共享架构,请使用
将其保存到全局变量中
pm.globals.set("schemaJSON",JSON.stringify(schema));
并按如下方式获取
const schemaJSON = pm.globals.has("schemaJSON") && pm.globals.get("schemaJSON");
const schema = schemaJSON && JSON.parse(schemaJSON);
tv4.validate 将始终 return 为真。无论架构是否有效 JSON 甚至只是虚拟字符串。我在 Whosebug 上浏览相关问题,banUnknownProperties 对我没有帮助
正如我所说,我什至尝试将架构变量更改为 "dummy",但 tv4 仍然没有发现错误。那是我在 Whosebug 上的第一个 post。抱歉,如果我的问题不清楚。
有效回复如下
[
{
"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 推断为架构。我不会在这里提供我的模式来保存 space。
这是我的测试代码:
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"
}
}
而且tv4这里没有看到任何错误
Postman 变量存储为字符串。 TV4 需要一个对象。
所以试着用 JSON.parse 覆盖你的 pm.variables.get:
var schema = JSON.parse(pm.variables.get("getHoursSchema"));
进行此更改后,我遇到了预期的模式验证错误。
@DieGraueEminenz 的建议可能会有所帮助,但我认为那里可能还会发生其他事情,我很好奇你如何通过你正在做的事情获得对 "JsonWebTokenError" 的引用,你应该调查那个。
但是关于您的架构问题,让我们通过在 pre-request 或虚拟请求的测试脚本(例如 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(...)
方法,因为它可以为您提供更多有关错误的信息。
上面的例子输出是
找出数据第一项中的故意错误。
完成后,开始通过响应连接数据,如果需要与其他请求共享架构,请使用
将其保存到全局变量中pm.globals.set("schemaJSON",JSON.stringify(schema));
并按如下方式获取
const schemaJSON = pm.globals.has("schemaJSON") && pm.globals.get("schemaJSON");
const schema = schemaJSON && JSON.parse(schemaJSON);