テストコード
毎回JSON.parse(response.json)をするのは面倒なので
メソッドに切り出したいです。
この処理をrequest系の処理全体で共通化します
require 'rails_helper'
RSpec.describe "Users", type: :request do
let!(:user) { create(:user) }
after { User.destroy_all }
describe "GET /users" do
before { get '/users' }
it 'ユーザー覧を取得できる' do
expect(response).to be_successful
expoect(body.size).to eq(1) # ヘルパーを使用
end
end
# ヘルパーメソッド: レスポンスJSONをパースする
def json
JSON.parse(response.body)
end
end
共通化手順
1 spec/support/request_helpers.rbを作成
2 メソッド作成
3 spec/rails_helper.rbでRails.root.glob('spec/support/**/*.rb').sort_by(&:to_s).each { |f| require f }
のコメントアウトを解除
4 moduleのinclude
1・2
# spec/support/request_helpers.rb
module RequestHelpers
def body
JSON.parse(response.body)
end
end
3
rails8ではRails.root.glob('spec/support/**/*.rb').sort_by(&:to_s).each { |f| require f }
でしたが、古いversionではDir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
の場合もあるようです。
4
RSpec.configure do |config|
...
config.include RequestHelpers, type: :request
end