tv4.validate将始终返回true。无论架构是有效的JSON还是仅仅是假字符串。我浏览了stackoverflow上的相关问题,并且banUnknownProperties对我没有帮助
正如我告诉我的,我什至试图将架构变量更改为“虚拟”,并且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"
}
}
tv4在这里看不到任何错误
答案 0 :(得分:0)
邮递员变量存储为字符串。 TV4需要一个对象。
因此,只需尝试在pm.variables.get上包装一个JSON.parse:
var schema = JSON.parse(pm.variables.get("getHoursSchema"));
通过此更改,我得到了预期的架构验证错误。
答案 1 :(得分:0)
@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(...)
方法,因为它为您提供了有关错误的更多信息。
上面的示例输出是
找出数据第一项中的故意错误。
一旦您开始从响应中连接数据,并且如果您需要与其他请求共享模式,请使用
将其保存到全局变量中。pm.globals.set("schemaJSON",JSON.stringify(schema));
并按以下方式获取
const schemaJSON = pm.globals.has("schemaJSON") && pm.globals.get("schemaJSON");
const schema = schemaJSON && JSON.parse(schemaJSON);