*実現したいこと
ユーザーがログインした状態でテストを行う。
*前提
railsでWebアプリを作成していてユーザーがプロフィールを編集する際のテストを行なっています。
また、編集画面に飛ぶ前にログインしているユーザーと編集対象のユーザーが一致しているかを確認しています。
*コード
users_controller.rb
ruby
1class UsersController < ApplicationController 2 before_action :current_user?, only: :edit 3 4 #他アクションなので省略 5 6 def edit 7 @user = User.find(params[:id]) 8 end 9 10 private 11 12 def current_user? 13 unless current_user == User.find(params[:id]) 14 flash[:danger] = "You can't Edit" 15 redirect_to root_path 16 end 17 end 18end 19
users_controller_spec.rb
ruby
1require 'rails_helper' 2 3RSpec.describe UsersController, type: :controller do 4 5 #他アクションのテストなので省略 6 7 describe "GET #edit" do 8 let(:user) { 9 FactoryBot.create(:user) 10 } 11 12 before do 13 sign_in user 14 end 15 16 it "returns http success" do 17 get :edit, params: { id: user.id } 18 expect(response).to be_successful 19 end 20 21 it "assigned the user" do 22 get :edit, params: { id: user.id } 23 expect(assigns(:user)).to eq user 24 end 25 26 it "returns a 200 response" do 27 get :edit, params: { id: user.id } 28 expect(response.status).to eq 200 29 end 30 end 31end 32
spec/rails_helper.rb
ruby
1RSpec.configure do |config| 2 3 config.include Devise::TestHelpers, type: :controller 4 config.include Devise::Test::ControllerHelpers, type: :controller 5 config.include Devise::Test::ControllerHelpers, type: :view 6 config.extend ControllerMacros, type: :controller 7 config.include Devise::Test::IntegrationHelpers, type: :request 8 [:controller, :view, :request].each do |type| 9 config.include ::Rails::Controller::Testing::TestProcess, type: type 10 config.include ::Rails::Controller::Testing::TemplateAssertions, type: type 11 config.include ::Rails::Controller::Testing::Integration, type: type 12 end 13end 14
*出てくるエラー
ruby
1Failure/Error: sign_in user 2 3 NoMethodError: 4 undefined method `serialize_into_session' for #<Class:0x00007fb1f23dfaf8>
*試したこと
こちらを参考にrails_helperにコードを追加してみましたがエラーは変りませんでした。
*環境
ruby 2.6.3
rails 5.2.3
以上、もし分かる方いましたら、教えて頂きたいです。
よろしくお願い致します。
あなたの回答
tips
プレビュー