json 架构的 ajv 验证在邮递员中是错误的

ajv validation of json schema is wrong in postman

我有 JSON:

{
    "data": {
        "regex": "some regex",
        "validationMessage": "some validation message"
    }
}

我使用 this tool 构建 json 架构。

初始化如下:

var Ajv = require('ajv'),
    ajv = new Ajv({logger: console}),
    schema = {
  "definitions": {},
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://example.com/root.json",
  "type": "object",
  "properties": {
    "data": {
      "$id": "#/properties/data",
      "type": "object",
      "properties": {
        "regex": {
          "$id": "#/properties/data/properties/regex",
          "type": "string",
          "pattern": "^(.*)$"
        },
        "validationMessage": {
          "$id": "#/properties/data/properties/validationMessage",
          "type": "string",
          "pattern": "^(.*)$"
        }
      }
    }
  }
};

然后我想检查 json 架构是否有效

pm.test('Schema is valid', function() {
    pm.expect(ajv.validate(schema, {alpha: 123})).to.be.true;
});

我看到测试通过了。 怎么了?为什么架构有效?

此外,我将用 JSON.parse(responseBody)

替换 {alpha: 123}

你可以试着把它改成这样:

var Ajv = require('ajv'),
    ajv = new Ajv({logger: console, allErrors: true}),
    schema = {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "regex",
            "validationMessage"
          ],
          "properties": {
            "regex": {
              "type": "string",
              "pattern": "^(.*)$"
            },
            "validationMessage": {
              "type": "string",
              "pattern": "^(.*)$"
            }
          }
        }
      }
    };

pm.test('Schema is valid', function() {
    pm.expect(ajv.validate(schema, { alpha: 123 }), JSON.stringify(ajv.errors)).to.be.true;
});

我将 allErrors 选项添加到 Ajv 并在测试中公开了这些选项。我还稍微修改了您的模式以添加对象所需的键。

我测试了这将是一个在测试中硬编码的对象,但也有模拟响应。