Не могу заставить DREDD использовать schema.example в качестве тела POST - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь использовать Dredd для тестирования моего API, указанного OpenAPI, но я не могу заставить Dredd распознавать тело моих запросов POST в формате JSON, оно продолжает отправлять мои запросы POST с пустым телом.Согласно документации Dredd он использует schema.example для "in": "body", и это именно то, что я делаю, но Dredd продолжает выдавать POST с пустым телом.

У меня естьпробовал оба OpenAPI3 и OpenAPI2 с тем же результатом.Моя операция POST в спецификации OpenAPI2 выглядит следующим образом:

  /availableCounters:
    post:
      summary: Get the available counters for a specified time range
      description: This API returns the available counters for the specific time range requested.
      responses:
        '200':
          description: OK
          schema:
            type: object
            properties:
              properties:
                type: array
                items:
                  $ref: '#/definitions/property_spec'
        '400':
          description: 'Could not retrieve available Counters: ${error}'
      parameters:
        - required: true
          name: body
          in: body
          schema:
            example: {"searchSpan": {"from": {"dateTime": "2019-01-20T21:50:37.349Z"},"to": {"dateTime": "2019-01-22T21:50:37.349Z"}}}
            type: object
            properties:
              searchSpan:
                $ref: '#/definitions/from_to'

Но когда я использую Dredd для проверки этого определения OpenAPI, для этой операции он не отправляет тело, как следует:

request:
method: POST
uri: /availableCounters
headers:
    User-Agent: Dredd/8.0.0 (Windows_NT 10.0.17134; x64)

body:



expected:
headers:

statusCode: 200
bodySchema: {"type":"object","properties":{"properties":{"type":"array","items":{"$ref":"#/definitions/property_spec"}}},"definitions":{"property_spec":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["Double","String","DateTime"]}}}}}


actual:
statusCode: 400
headers:
    connection: close
    date: Tue, 12 Feb 2019 23:22:09 GMT
    content-type: text/plain; charset=utf-8
    server: Kestrel
    content-length: 96

bodyEncoding: utf-8
body:
Could not retrieve available Counters: TypeError: Cannot read property 'searchSpan' of undefined

Я пытался использовать и schema.example, и schema.x-example, но Dredd не будет отправлять тело.Как я уже говорил ранее, я также попробовал OpenAPI3 и получил тот же результат.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 28 февраля 2019

Вопрос старый, но проблема все еще существует: Дредд, похоже, игнорирует параметр тела, если поле потребляет отсутствует.

Так что попробуйте:

/availableCounters:
  post:
    summary: Get the available counters for a specified time range
    consumes:
     - application/json
[...]
...