ajv-cli总是说坏数据是有效的



将ajv-cli作为自动测试脚本的一部分运行,以确保模拟数据是最新的。

./node_modules/.bin/ajv -s ./test-data/manifest.schema.json -d ./test-data/fleet.manifest.json
./test-data/fleet.manifest.json valid

但是这些数据是无效的。

manifest.schema.json:

{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"ManifestHistoryItem": {
"properties": {
"id": {
"default": [
"assetCatalog",
"Roster"
],
"items": {
"type": "string"
},
"type": "array"
},
"name": {
"default": "",
"type": "string"
}
},
"required": [
"id",
"name"
],
"type": "object"
}
}
}

fleet.manifest.json:

{
"namee": "Epic Space Battles"
}

(缺少必需的"id"属性,"name"拼写错误(

Schema是从类型脚本模型的"typescript-json-schema": "^0.54.0"生成的,并通过"ajv-cli": "^5.0.0"进行评估。

您的模式声明了定义,但它不会在任何地方引用它们。您需要在根目录中添加一个"$ref": "#/definitions/ManifestHistoryItem"

{
"definitions": {
"ManifestHistoryItem": { ... }
},
"$ref": "#/definitions/ManifestHistoryItem"
}

要么这样,要么完全去掉定义包装器,只需要上面的{ ... }部分。


实际上,您定义了一个空模式,它不应用任何约束,这意味着所有实例(数据(都通过。

最新更新