前提・実現したいこと
Rspecでcreateアクションのテストコードを書いています。
createアクションでは作成済みの親モデル(question)を呼び出し、それに子モデル(answer)を紐付けて作成するようにコードを書いていたのですがcreate実行時の@question = Question.find(params[id])がRspec上では実行できないエラーに直面しています。
開発環境ではnewアクションで@questionを定義し、それをviewで
<%= hidden_field_tag :id, @question.id %>とすることでQuestion.find(params[id])で取り出せるようにしていました。
Rspecで同様にhidden_field_tagのidを取り出す方法を教えていただきたいです。
発生している問題・エラーメッセージ
Failure/Error: @question = Question.find(params[:id]) ActiveRecord::RecordNotFound: Couldn't find Question without an ID
該当のソースコード
rspec
1describe "POST /create" do 2 let(:question){create(:question)} 3 it "redirects to new" do 4 post answers_path, params: {answer: {content: "test"}} 5 expect(response).to redirect_to new_answer_path 6 end 7 end
controller
1def new 2 @question = Question.where( 'id >= ?', rand(Question.first.id..Question.last.id) ).first 3 @answer = @question.answers.new 4 end 5 6def create 7 @question = Question.find(params[:id]) 8 @answer = @question.answers.new(answer_params) 9 @answer.assign_attributes(user_id: current_user.id) 10 if @answer.save! 11 redirect_to new_answer_path 12 end 13 end
view
1 <section> 2 <%= @question.content %> 3 </section> 4 5 <%= form_with(model: @answer, local: true) do |f| %> 6 <%= hidden_field_tag :id, @question.id %> 7 8 <%= f.text_field :content %> 9 10 <%= f.submit "next", class: "btn" %> 11 <% end %>
試したこと
rspecのコードでpostの前に下記のコードを追加しましたが同じエラーが出ました。
get new_answer_path, params: {question: {id: question.id}}
補足情報(FW/ツールのバージョンなど)
ruby '3.0.2'
rails '6.0.3'
rspec-rails '4.0.1'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/31 10:37