前提・実現したいこと
現在ECサイトに機能を追加していくという課題に取り組んでいる最中なのですがrspecで以前まで通っていたcontrollerのテストが通らなくなってしまったのでその解決をすることを実現したいと考えています。
具体的にはproducts_controller.rbのテストが通らなくなりました。
思い当たる節としては、以前実装した商品詳細ページから今回実装したカテゴリーページへの遷移を行うためにlink_toを使用したのですがそこが原因だと考えています。
発生している問題・エラーメッセージ
1) Potepan::Products #show idがデータベースに存在する場合 ステータスコードが200を返す Failure/Error: <%= link_to potepan_category_path(@product.taxons.first.id) do %> ActionView::Template::Error: undefined method `id' for nil:NilClass # ./app/views/potepan/products/show.html.erb:62:in `_app_views_potepan_products_show_html_erb___1133224703748827647_139300' # ./spec/requests/potepan/products_spec.rb:6:in `block (4 levels) in <top (required)>' # ------------------ # --- Caused by: --- # NoMethodError: # undefined method `id' for nil:NilClass # ./app/views/potepan/products/show.html.erb:62:in `_app_views_potepan_products_show_html_erb___1133224703748827647_139300'
該当のソースコード
rails
1class Potepan::ProductsController < ApplicationController 2 def show 3 @product = Spree::Product.includes(master: [images: [attachment_attachment: :blob]]).find(params[:id]) 4 end 5end
rails
1require 'rails_helper' 2RSpec.describe 'Potepan::Products', type: :request do 3 describe '#show' do 4 context 'idがデータベースに存在する場合' do 5 before do 6 get potepan_product_path(product.id) 7 end 8 9 let(:product) { create(:product, name: "T-shirts") } 10 11 it 'ステータスコードが200を返す' do 12 expect(response).to have_http_status(200) 13 end 14 15 it 'showテンプレートが描画される' do 16 expect(response).to render_template :show 17 end 18 19 it '商品名が表示される' do 20 expect(response.body).to include product.name 21 end 22 23 it '商品概要が表示される' do 24 expect(response.body).to include product.description 25 end 26 27 it '商品金額が表示される' do 28 expect(response.body).to include product.display_price.to_s 29 end 30 end 31 end 32end
試したこと
エラー内容からわかるようにidがnilの状態になっているのはわかりましたので@product.taxons.first.idの箇所に問題がるという推測に至りました。
productに関してはletで定義されていますのでtaxonsについても定義するのかという考えになり一応定義の方しましたがエラーは解決されませんでした。
また、before do~end内にカテゴリーへのパスを入力してみましたがエラーな解決にならなかったので手段が違うのだろうと思っていて現在も模索中です。
補足情報(FW/ツールのバージョンなど)
mac os big sur ver11.4
あなたの回答
tips
プレビュー