コントローラーテスト詳細
コントローラーテスト詳細
Section titled “コントローラーテスト詳細”リクエストスペック
Section titled “リクエストスペック”require 'rails_helper'
RSpec.describe 'Users', type: :request do describe 'GET /users' do context '認証済みユーザーの場合' do let(:user) { create(:user) } let(:headers) { { 'Authorization' => "Bearer #{user.token}" } }
it 'ユーザー一覧を返すこと' do create_list(:user, 3)
get '/api/users', headers: headers
expect(response).to have_http_status(:success) json = JSON.parse(response.body) expect(json['users'].length).to eq(4) # 3 + 1 (認証ユーザー) end end
context '未認証ユーザーの場合' do it '401エラーを返すこと' do get '/api/users'
expect(response).to have_http_status(:unauthorized) end end end
describe 'POST /users' do let(:valid_params) do { user: { email: 'new@example.com', password: 'password123', password_confirmation: 'password123' } } end
context '有効なパラメータの場合' do it 'ユーザーを作成すること' do expect { post '/api/users', params: valid_params }.to change { User.count }.by(1)
expect(response).to have_http_status(:created) json = JSON.parse(response.body) expect(json['user']['email']).to eq('new@example.com') end end
context '無効なパラメータの場合' do it 'エラーを返すこと' do invalid_params = valid_params.deep_merge(user: { email: '' })
post '/api/users', params: invalid_params
expect(response).to have_http_status(:unprocessable_entity) json = JSON.parse(response.body) expect(json['errors']).to be_present end end endendコントローラースペック
Section titled “コントローラースペック”require 'rails_helper'
RSpec.describe UsersController, type: :controller do describe 'GET #index' do let(:user) { create(:user) }
before { sign_in user }
it '成功すること' do get :index expect(response).to have_http_status(:success) end
it 'ユーザー一覧を取得すること' do create_list(:user, 3) get :index expect(assigns(:users).count).to eq(4) end end
describe 'POST #create' do context '有効なパラメータの場合' do it 'ユーザーを作成すること' do expect { post :create, params: { user: attributes_for(:user) } }.to change { User.count }.by(1) end
it 'リダイレクトすること' do post :create, params: { user: attributes_for(:user) } expect(response).to redirect_to(User.last) end end endend