Skip to content

コントローラーテスト詳細

spec/requests/users_spec.rb
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
end
end
spec/controllers/users_controller_spec.rb
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
end
end