План API потерпел неудачу с Dredd на API в реальном времени?
Я нахожусь в процессе обновления dredd с 1.08 до последней версии, в то время как в нем я пытаюсь проверить нашу документацию API, написанную в виде чертежа с тестовым API в реальном времени, и она терпит неудачу.
Поскольку тесты выполняются для API реального времени, ответ, возвращаемый API, содержит значения, отличные от указанных в документе blurprint. Я получаю следующую ошибку от Dredd.
Может ли кто-нибудь помочь мне разобраться?:)
Тело: At '/ data / email' Нет совпадения перечисления для: "dredd_testzz@keyflow.se"
body: At '/ data / firstName' Нет совпадений для: "Sniper"
body: At '/ data / lastName' Нет совпадений для: "Wolf"
body: At '/ 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)
Схема JSON, сгенерированная dredd, приведена ниже
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"
]
}
1 ответ
TL;DR: попробуйте использовать fixed-type
вместо fixed
в вашем документе API Blueprint. 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
атрибут, как объяснено в разделе 4.3 "Типы вложенных элементов" спецификации MSON, фиксирует не только структуру, но и все значения и распространяется далее вниз по структуре данных:
... МОЖЕТ указывать фиксированный, чтобы указать "объект значения", в котором ДОЛЖНЫ присутствовать все свойства, а значения свойств ДОЛЖНЫ быть значениями, указанными, если таковые имеются, в его типах вложенных элементов. Кроме того, такая структура типа объекта НЕ ДОЛЖНА содержать никаких других свойств.
Я думаю, что вы хотите использовать fixed-type
вместо этого, который фиксирует только структуру. Это дополнительно объясняется также в разделе "Как сделать проверку Dredd более строгой " в документах Dredd.