我想用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遵循规范,从而也包括导致错误的示例。但是另一方面,任意的错误示例将不会包含在文档中,不是吗?
这里的最佳做法是什么?
答案 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中的一等公民”是优先事项之一,因此这只是时间问题。