🤯

openAPIからstepciのワークフローを生成した際に、確認ステータスコードが0になる問題の対処法

2024/02/17に公開

エラーの概要

  • openAPIの定義書からstepciのワークフローを生成すると、確認ステータスコードが定義書では200などにしても、ワークフロー上ではなぜか0になってしまう。

エラーの再現手順

  • 以下のようなopenAPI定義書を用意
def.yml
openapi: '3.0.2'
info:
  version: '1.0.0'
  title: 'test openapi definition'
servers:
  - url: https://example.com
paths:
  /test-path:
    get:
      summary: 'テスト用のAPI'
      parameters:
        - in: query
          name: testParameter
          schema:
            type: string
          example: 'test-parameter'
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
  • 以下のコマンドでopenAPI定義書からstepciのワークフローを生成
$ npx stepci generate def.yml stepci-workflow.yml
  • ワークフローで確認するステータスコードが本来ならば200になるはずだが、0になってしまう。
stepci-workflow.yml
version: "1.0"
name: test openapi difinition
config:
  http:
    baseURL: https://example.com
tests:
  default:
    name: Default
    steps:
      - name: テスト用のAPI
        http:
          url: /test-path
          method: GET
          params:
            userName: test-user
          check:
            status: 0 # ←本来ならば200になるはず
            schema:
              type: object

原因

  • stepciの内部依存パッケージである"@stepci/plugin-openapi"のv0.3.6、およびv0.3.7において、responses直下のkey(def.ymlの例だと"200")が"default"の場合は確認ステータスが200になるが、それ以外の場合はが0になってしまうバグが混入していたため。

解決方法

  • "@stepci/plugin-openapi"のversionを下記のように0.3.5で固定する。
package.json
{
  "devDependencies": {
    "@stepci/plugin-openapi": "0.3.5",
    "stepci": "^2.7.2"
  }
}

まとめ

  • 最初はAPI定義書の書き方が間違えているのかと思って、openAPIのドキュメントをあさるのに結構な時間を費やしてしまいましたが、バッケージ固有のバグであるケースも視野に入れておいた方が良さそうですね。

Discussion