RailsでAPIを作る時に毎回テストの設定が面倒なのでUserモデルでベースを作成してみました。
https://github.com/kanadai/rails-api-starter
starterはuserを作成した状態です。
以下のgemでymlに記載したAPI仕様と実装の整合が取れるようになっています。
gem
・prmd
・rack-json_schema
・active_model_serializers(JSON用)
新規modelの作成(userの場合)
bin/rails g scaffold user name:string email:string password:string
bin/rake db:migrate
bundle exec prmd init --yaml user > docs/schema/yml/user.yml
user.ymlとrspecを更新
*rspecと合っていないとテストが落ちます
ymlとrspecの整合が取れていないと、request specが500エラーで落ちます。
その場合はconfig/application.rb
のconfig.middleware.use Rack::JsonSchema::ErrorHandler
をコメントアウトすると原因が探しやすいかもしれません。
config/application.rb
if ENV['RAILS_ENV'] == 'test'
system('bundle exec prmd combine doc/schema/yml/* > doc/schema/schema.json')
schema = JSON.parse(File.read("#{Rails.root}/doc/schema/schema.json"))
これ→# config.middleware.use Rack::JsonSchema::ErrorHandler
config.middleware.use Rack::JsonSchema::ResponseValidation, schema: schema
end
仕様を書く必用がなければ、上記のif ENV['RAILS_ENV'] == 'test'
のブロックを消せばrspecだけで動きます。
テスト実行
guard
Rspecはかなり冗長ですm(__)m