前提・実現したいこと
RSpecを用いてControllerのテストコードを現在開発しており、その過程でshowアクションのテストコードでエラーが出てしまいいくら考えても解決することができないので先輩方にぜひ力を貸していただきたいです。
showアクションはログインを必要としており、特定のuserのプロフィールページを表示します。
発生している問題・エラーメッセージ
Failures: 1) User GET #show リクエストは200 OKとなること Failure/Error: get user_path, params: user.id ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"users"}, missing required keys: [:id] # ./spec/controllers/users_controller_spec.rb:72:in `block (3 levels) in <top (required)>'
該当のソースコード
describe 'GET #show' do let(:user) { FactoryBot.create(:user) } before do allow_any_instance_of(ActionDispatch::Request).to receive(:session).and_return(user_id: user.id) end it 'リクエストは200 OKとなること' do get user_path, params: user.id expect(response.status).to eq 200 end end
users/controllerのshowアクションは以下のようになっています。
def show @user = User.find(params[:id]) @user_product = @user.products.order(id: :desc).page(params[:page]).per(6) end
spec/factries/user.rbは以下のようになっています。
FactoryBot.define do factory :user do username {"ルフィ太郎"} language {"Ruby"} introduction {"海賊王に俺はなる"} sequence(:email) { |n| "ruffy#{n}@ruffy.com"} password {"ruffy"} end end
試したこと
エラーコード内で、
No route matches {:action=>"show", :controller=>"users"}, missing required keys: [:id]
と怒られてしまっていますが、
get user_path, params: user.id
この部分でユーザーのidを指定しているのでid を渡せていないのではなく、そもそもログインができてないと思っているのですが、その解決方法がわかりません。
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
まだまだ初学者なの優しく教えていただけるとありがたいです。
あなたの回答
tips
プレビュー