【问题标题】:Validating JS Tests against a JSON Schema针对 JSON Schema 验证 JS 测试
【发布时间】:2018-05-24 19:42:43
【问题描述】:

我有一个 API 以格式返回响应

[
{"id": 12345,
"value": "some_string",
"practice_id": "12344"},

{"id": 12346,
"value": "some_other_string",
"practice_id": "12345"},
]

我正在测试响应是否验证了特定的 JSON 架构,而我的架构测试是

response.body.should.have.schema({
        type: 'array',
        required: ['id', 'value', 'practice_id'],
        properties: {
            id: {
                type: 'number',
            },
            value: {
                type: 'string',
            },
            practice_id: {
                type: 'string',
                minLength: 5,
            }            
        }
    });

问题是即使我将id的类型更改为string或将practice_id的值更改为number,测试也通过了,这是不正确的。

我在这里做错了什么?我正在使用Postman-BDD 来验证回复。

【问题讨论】:

  • 字符串与数字和id一起使用,但数字和id不能包含字符串。尝试将值设置为数字,你应该得到一个错误

标签: javascript json testing postman jsonschema


【解决方案1】:

我猜你的架构应该更像这样:

{
  "type": "array",
  "items":
  {
    "required":
    [
        "id",
        "value",
        "practice_id"
    ],
    "properties":
    {
        "id":
        {
            "type": "number"
        },
        "value":
        {
            "type": "string"
        },
        "practice_id":
        {
            "type": "string",
            "minLength": 5
        }
    }
  }
}

您缺少实际定义数组内容的“items”关键字。而且这个模式还在 JSONBuddy 中在验证一些示例数据时出现错误:

【讨论】:

  • 当响应是对象数组时,我是否需要添加“项目”?如果我将模式用于 json 对象响应,则它可以完美地工作。
  • 是的,如果要指定有效的数组元素,则需要对数组使用“items”。另请记住,JSON 模式默认描述的是开放数据模型。这意味着空 JSON 模式允许任何内容。
  • 注明。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-10-21
  • 2020-12-01
  • 2021-11-04
  • 2015-03-04
  • 2015-10-24
  • 2022-08-16
  • 2019-04-21
  • 1970-01-01
相关资源
最近更新 更多