План 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.

Другие вопросы по тегам