nakajima97 / letter-box-backend

letter-boxのバックエンド
0 stars 0 forks source link

committeeを用いてAPI設計書に則っていることを検証する #4

Closed nakajima97 closed 3 years ago

nakajima97 commented 3 years ago

概要

2 でcommitteeを用いた検証を終了条件に入れていたが、

動作させる解決の糸口が見えなかった。

埒が明かないので、committeeによる検証は本issueに切り出した

終了条件

2で試したこと

rspec + committee + committee railsを導入 $ rails generate rspec:install 上記を実行し、rspecの初期設定を行った

rails_helper.rbに以下を追記

yaml_path = "#{Rails.root}/doc/letter-box-api/reference/letter-box-api.yaml"
  config.add_setting :committee_options
  config.committee_options = {
    schema_path: Rails.root.join('schema', yaml_path).to_s,
    query_hash_key: 'rack.request.query_hash',
    parse_response_by_content_type: false,
    prefix: '/api/v1'
  }

rails g rspec:controller storesでテストコードの雛形作成 その後、以下コードを追記

describe "get stores" do
  it "test" do
    get '/stores/aaa'  #aaaとしたのはテストのため
    assert_response_schema_confirm
    end
  end

rpsecでテストを動作させたところ以下エラーが発生

Failure/Error: get '/stores/aaa'

ActionController::RoutingError:No route matches [GET] "/stores/aaa"

ブラウザでhttp://localhost:3000/api/v1/stores/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%ABにアクセスした際は正常にjsonが取得できた (storesの次は「サンプル」をURLエンコードした値) Screenshot from 2021-06-29 15-43-40

解決

open apiのバージョンが3.1.0になっていたので、3.0.0に修正 committeeの設定でprefixを使うとActionController::RoutingError:No route matches [GET]が発生するのですべて手書きで書いていく また、仕様書も各パスの頭にapi/v1を追加した

nakajima97 commented 3 years ago

committeeが無事動作しテストをクリアしたことを確認

root@0ad539584016:/workspace/api# rspec
WARN: Unresolved or ambiguous specs during Gem::Specification.reset:
      minitest (>= 5.1)
      Available/installed versions of this gem:
      - 5.14.4
      - 5.14.2
      racc (~> 1.4)
      Available/installed versions of this gem:
      - 1.5.2
      - 1.5.1
WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'
Please report a bug if this causes problems.
.

Finished in 0.12182 seconds (files took 1.35 seconds to load)
1 example, 0 failures