用Dredd测试错误响应的最佳实践是什么?

时间:2019-09-02 12:56:28

标签: openapi dredd

我想用openapi 3描述我现有的API,并用dredd证明我的描述。我知道openapi 3的实现是实验性的,但是我不使用the elements which are not supported yet中的任何一个。

这是我spec.yaml的一部分

paths:
  /login:
    post:
      summary: Login
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/login_request'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/login_response'
        "401":
          description: Not authenticated
        "404":
          description: Other Error

...

  schemas:
    login_request:
      type: object
      properties:
        n:
          type: string
          description: Username
          example: super
        p:
          type: string
          description: Password
          example: user123

因此,我可以测试是否输入了正确的凭据(假设测试用户在此),因为它们在规范中作为示例给出。但是错误情况呢?当然,我可以在hooks.js文件中跳过它们:

var hooks = require('hooks');

hooks.before('/login > Login > 401', function (transaction, done) {
    transaction.skip = true;
    done();
});

hooks.before('/login > Login > 404', function (transaction, done) {
    transaction.skip = true;
    done();
});

注意:在我的情况下,可能是由于使用openapi 3,Dredd的行为与所说的here相矛盾:错误响应不会自动被跳过。

但这是可取的吗?我宁愿也测试正确的错误反应。但是如何?我怀疑它现在是否受支持,但是至少从理论上讲,我可以insert multiple examples遵循规范,从而也包括导致错误的示例。但是另一方面,任意的错误示例将不会包含在文档中,不是吗?

这里的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

您要询问的is documented in the Dredd docs区域,但仅适用于API Blueprint和OpenAPI 2格式:

  

OpenAPI 2格式允许为单个操作指定多个响应。默认情况下,Dredd仅测试带有2xx状态代码的响应。带有其他代码的响应被标记为已跳过,可以在挂钩中激活-请参阅“多请求和响应”操作指南。

但是,对于OpenAPI 3,这是未定义的,未经测试的和未记录的。有一个GitHub issue about the problem,在关闭之前,我相信您的问题无法回答。

issue about future of Dredd已宣布“使OpenAPI 3成为Dredd中的一等公民”是优先事项之一,因此这只是时间问题。