我正在将dredd从1.08升级到最新版本,而在此期间,我正在尝试验证我们的api文档,用实时测试API编写蓝图并且它失败了。
由于测试是针对实时api运行的,因此从api返回的响应包含的值不同于blurprint文档中指定的值。我从dredd收到以下错误。
有人可以帮我搞清楚吗? :)
正文:在'/ data / email'没有枚举匹配:“dredd_testzz@keyflow.se”
body:在'/ data / firstName'没有枚举匹配:“Sniper”
正文:在'/ data / lastName'没有枚举匹配:“狼”
正文:在'/ data / verified'没有枚举匹配:false
## `ResponseSchema` (object)
+ email: `john.doe@example.com` (string, required) - Email address
+ firstName: John (string, required) - First name
+ lastName: Doe (string, required) - Last name
+ verified: true (boolean, required) - True
# Group Account
## Login [/login/?]
Login user
### Login [POST]
Authentication required.
+ Request (application/json)
+ Attribute (LoginInputSchema)
+ Response 200 (application/json; charset=UTF-8)
+ Attribute
+ status: 200 (number, required, fixed)
+ data (ResponseSchema, required, fixed)
dredd生成的JSON Schema位于
之下bodySchema: {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "number",
"enum": [
200
]
},
"data": {
"type": "object",
"properties": {
"email": {
"type": "string",
"enum": [
"john.doe@example.com"
],
"description": "Email address of the guest."
},
"firstName": {
"type": "string",
"enum": [
"John"
],
"description": "First name of the guest."
},
"lastName": {
"type": "string",
"enum": [
"Doe"
],
"description": "Last name of the guest."
},
"verified": {
"type": "boolean",
"enum": [
true
],
"description": "The user is verified or not"
},
},
"required": [
"email",
"firstName",
"lastName",
"verified",
],
"additionalProperties": false
}
},
"required": [
"status",
"data"
]
}
答案 0 :(得分:2)
TL; DR:尝试在API蓝图文档中使用fixed-type
代替fixed
。 fixed
要求样本值为实际值。
更详细的解释:
body: At '/data/email' No enum match for: "dredd_testzz@keyflow.se"
这意味着被测服务器返回的响应包含一个可正确解析的JSON主体,但根据API描述提供的模式,主体无效。
错误指向/data/email
,这意味着{"data": {"email": ...
属性存在问题。此外,它提到了enum
值,并且实际响应包含dredd_testzz@keyflow.se
,枚举不允许这样做。其他错误类似。
查看API描述,响应中预期的规范如下:
+ Attribute
+ status: 200 (number, required, fixed)
+ data (ResponseSchema, required, fixed)
fixed
属性,如MSON规范的4.3 Nested Member Types部分所述,不仅修复了结构,还修复了所有值,并在数据结构中进一步传播:
...可以指定固定来表示"值对象"必须存在所有属性的地方,属性的值必须是其嵌套成员类型中指定的值(如果有)。此外,这种对象类型结构绝不能包含任何其他属性。
我认为您想要使用fixed-type
来修改结构。这在Dredd文档的Making Dredd Validation Stricter部分中进一步说明。