例えば、 OpenAPI の定義がこうなっていたとします。レスポンスのプロパティとして、 name
と size
があります。
responses: 200: description: 正常系 content: application/json: schema: type: object properties: name: type: string size: type: integer
実際の API のレスポンスがこうだったとします。
{"name": "Sparta", "size": 300, "luck": false}
実際のレスポンスには name
と size
に加えて、 luck
が含まれています。
この時、 Dredd のテストはエラーになりません。
この件は、 Dredd のドキュメントの Avoiding Additional Properties の項にも書いてあります。
https://dredd.org/en/latest/how-to-guides.html#avoiding-additional-properties
JSON スキーマは、不要なプロパティを含んでいたとしても、パースする時にエラーにはならないからです。
これをエラーにしたい場合、 OpenAPI 2 においては、 additionalProperties: false
を指定すれば良いらしいです。
responses: 200: description: 正常系 content: application/json: schema: type: object additionalProperties: false properties: name: type: string size: type: integer
これで、「API にプロパティが追加されたが、 OpenAPI の仕様を変更し忘れていた」という場合に、エラーにできます。
ただし、 OpenAPI 3 では、 additionalProperties: false
を指定したとしてもエラーになりません。 Dredd の OpenAPI 3 対応はまだ experimental (実験的)なので、対応してないということでしょう。
今回のものを始め、 まだ OpenAPI 3 に対応していない機能は多数あるので注意してください。
今回の件の詳細を確認したい場合は、先程も挙げた Dredd の公式ドキュメントを確認してください。
https://dredd.org/en/latest/how-to-guides.html#avoiding-additional-properties