controllerのテストを実行する場合は、requestのテストを作成します。
$ rails generate rspec:request users
APIモードのRailsなので、基本はJSONの戻り値を判定します。
factorybotを利用した例です。
ログイン処理はshared contextで共通化しています。
requestの送り方は以下のようにきじゅつ
before { get '/users' }
例
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
expect(body.size).to eq(1)
end
end
describe "GET /users/:id" do
before { get "/users/#{user.id}" }
it 'ユーザーを取得できる' do
expect(response).to be_successful
pp user.id
expect(body['id']).to eq(user.id)
end
end
describe "POST /users" do
before { post '/users', params: { user: { email: 'sample@example.com', password: "Password123!" } } }
it 'ユーザーを作成できる' do
expect(response).to be_successful
expect(body['email']).to eq('sample@example.com')
end
end
describe "PUT /users/'id" do
include_context 'login setup'
it 'ユーザーを更新できる' do
put "/users/#{login_user.id}",
params: { user: { email: "updated@gmail.com", password: "Password1234!" } },
headers: login_headers
expect(response).to be_successful
expect(body['email']).to eq('updated@gmail.com')
end
end
describe "DELETE /users/:id" do
before { delete "/users/#{user.id}" }
it 'ユーザーを削除できる' do
expect(response).to be_successful
expect(User.count).to eq(0)
end
end
end