Request specを書いています。
つぶやき一覧ページに遷移して、「つぶやき一覧ページのリクエストが成功していること」、「つぶやきの内容を取得していること」をテストしたいです。
現状、「つぶやき一覧ページのリクエストが成功していること」のテストは通りましたが、「つぶやきの内容を取得していること」のテストが通りません。
requestspec
1require 'rails_helper' 2 3RSpec.describe "Sessions", type: :request do 4 5 describe "GET users/:id" do 6 let(:test_user) { create(:user) } 7 let(:test_post) { create(:post, user: test_user) } 8 9 it "つぶやき一覧ページのリクエストが成功していること" do 10 get posts_path 11 expect(response).to have_http_status(200) 12 end 13 14 it "つぶやきの内容を取得していること" do 15 get posts_path 16 expect(response.body).to include test_post.content 17 end 18 end 19end
デバックしてみましたが、test_post
はきちんと作成されていますし(下記ログ↓)、
terminal
1[2] pry(#<RSpec::ExampleGroups::Sessions::GETUsersId>)> test_post 2=> #<Post:0x000055ff9b0b1800 3 id: 1, 4 content: "わーい", 5 created_at: Sun, 09 Jan 2022 16:19:07.862336000 JST +09:00, 6 updated_at: Sun, 09 Jan 2022 16:19:07.862336000 JST +09:00, 7 user_id: 1> 8
response.body
を見てみても(下記ログ↓)、class=\"postwrapper\"
やclass=\"postindex\"
といったつぶやき一覧ページ特有のdivタグが出てきたのできちんとつぶやき一覧ページに遷移できていると思います。
terminal
1[1] pry(#<RSpec::ExampleGroups::Sessions::GETUsersId>)> response.body 2"...(省略)...<body>\n <div class=\"postwrapper\">\n <div>\n </div>\n <div class=\"postindex\">\n </div>\n \n</div>\n\n </body>\n</html>\n"
自分としては、つぶやきが作成されているのにresponse.body
でつぶやきの内容が確認できないのが不思議です。
質問としてはなぜtest_post
は作成されているのにテストが通らないのでしょうか。またどうすればテストが通るのかご教示いただければ嬉しいです。
何卒よろしくお願い申し上げます。
index
1<div class="postwrapper"> 2 <div> 3 <% if flash[:notice] %> 4 <%= flash[:notice] %> 5 <% end %> 6 </div> 7 <div class="postindex"> 8 <% @posts.each do |post| %> 9 <div class="post"> 10 <div class="postleft"> 11 <div class="postleftsub"> 12 <div class="postimg"> 13 <img src="<%= "/user_images/#{post.user.image_name}" %>"> 14 </div> 15 <p class="postusername"> 16 <%= link_to(post.user.name, "/users/#{post.user.id}") %> 17 </p> 18 </div> 19 <p class="today"> 20 <%= l post.created_at %> 21 </p> 22 <p class="postedit"> 23 <% if post.user.id == @current_user.id %> 24 <%= link_to("編集", "/posts/#{post.id}/edit") %> 25 <% end %> 26 </p> 27 </div> 28 <div class="postright"> 29 <p class="postcontent"> 30 <%= post.content %> 31 </p> 32 <div class="likewrapper"> 33 <% @likes_count = Like.where(post_id: post.id).count %> 34 <%= @likes_count %> 35 <% if Like.find_by(user_id: @current_user.id, post_id: post.id) %> 36 <div class="like"> 37 <%= button_to("/likes/#{post.id}/destroy", {method: :delete, id: "spec_like"}) do %> 38 <img src ="/images/like2.png"> 39 <span class="otsukare">おつかれさま!</span> 40 </div> 41 <% end %> 42 <% else %> 43 <div class="like"> 44 <%= button_to("/likes/#{post.id}/create", method: :post, id: "spec_nolike") do %> 45 <img src ="/images/like.png"> 46 </div> 47 <% end %> 48 <% end %> 49 </div> 50 </div> 51 </div> 52 <% end %> 53 </div> 54 <%= paginate @posts %> 55</div>
参考にさせていただいたデバック方法です。
rspecのrequest specでうまくいかない時の原因調査のちょっとしたハック
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/09 13:18