【问题标题】:How to verify if a value is of format and/or type double using ajv schema validation?如何使用 ajv 模式验证验证值是否为格式和/或类型为 double?
【发布时间】:2020-07-14 12:57:16
【问题描述】:

我正在使用 Ajv 版本 07。

我正在尝试使用 ajv 验证验证 JSON 响应正文返回的属性值在邮递员中的类型和格式为 double,但是,我无法做到这一点。我已经尝试在网上搜索它,但仍然没有找到任何相关信息。

我尝试输入以下内容:

  • “类型”:“双”,

    “格式”:“双”

  • “类型”:“双”,

    “格式”:“双”

  • “类型”:“数字”

    “格式”:“双”

上述所有尝试均未成功,因为它们都带有一条错误消息:

  • 错误:架构中使用了未知类型“double”

  • 错误:架构中使用了未知格式“double”

谁能帮我解决这个问题?

架构

var Ajv = require ('ajv'),
ajv = new Ajv ({logger:console}),
expectedResponseSchema = 
{
    "items": {
        "required": [
            "payments"
     ],
        "properties": {
    "payments": {
                "items": {
                    "required": [
                        "amount"
    ]
        "properties": {
                        "amount": {
                            "$id": "#/items/properties/payments/items/properties/amount",
                            "type": "number",
                            "format": "double"
                        }
   }
  }
 }
}
}

邮递员测试

var currentSchPmExpTest;

try{     
currentSchPmExpTest = ' expectedResponseSchema variable';
    pm.expect(ajv.validate(expectedResponseSchema, jsonData)).to.be.true;
pm.test('Test 1 - PASSED - expectedResponseSchema variable data matches schema returned by body response!', () => true);
} catch(e){
    pm.test('Test 1 - FAILED - Expected data does not match response body data!', () => {throw new Error(e.message + " in " + currentSchPmExpTest)});
}

身体反应


[
  {
    "payments": [
      {
        "amount": 2.200000045367898,

      }
    ]
  }
]

【问题讨论】:

  • 您的完整架构在应用程序中是什么样的以及您的测试脚本是什么样的。这感觉就像是信息的一半。
  • @DannyDainton 架构和邮递员测试已添加。
  • @DannyDainton 正文回复已添加。
  • 更新了我的答案,让您的测试更易于管理。我不知道这是否有助于提高价值 - 您可以尝试使用 pattern 并在其中添加一些正则表达式?我已经看到 multipleOfnumber 一起使用,但我没有尝试过。
  • 不确定,但这是stackoverflow.com/q/55021811的副本吗?

标签: javascript postman json-schema-validator ajv


【解决方案1】:

我不确定您从哪里获得类型和格式,但根据 AJV docs(可能已过期)不是有效的 type

编辑:

根据您的更新,我建议您将测试脚本更改为类似的内容,以便检查您正确的部分架构:

let schema = {
    "type": "array",
    "items": {
        "type": "object",
        "required": [
            "payments"
        ],
        "properties": {
            "payments": {
                "type": "array",
                "items": {
                    "type": "object",
                    "required": [
                        "amount"
                    ],
                    "properties": {
                        "amount": {
                            "type": "number",
                        }
                    }
                }
            }
        }
    }
}

pm.test("Check Schema", () => {
    pm.response.to.have.jsonSchema(schema)
}) 

如果您也需要,也可以在此周围添加 try/catch 块。

【讨论】:

  • 是的,我也遇到了该信息。然后我对它进行了更多研究,看看是否有办法检查 format 双精度,但没有成功。
  • 它不是一个有效的类型或格式,所以总是会给你同样的错误。你在做什么研究,你能提供一个链接到它说你可以使用 double 的地方吗?
  • 这正是我一直试图弄清楚的,如果它允许与否。但如果它没有这样做的替代方法是什么?
  • 我不知道您要验证什么 - 问题中没有任何内容可以告诉人们响应中的价值是什么。你能更新一个示例响应正文吗?
  • 感谢您的提示。但是,这仍然回答了我的问题:是否可以检查一个值是否为双精度值?
猜你喜欢
  • 2018-06-05
  • 2018-01-22
  • 2017-04-29
  • 2018-04-15
  • 2018-10-21
  • 2020-01-20
  • 2018-02-03
  • 2019-06-10
  • 2017-10-23
相关资源
最近更新 更多