質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

962閲覧

request specで投稿内容が表示されない

F.Iku

総合スコア3

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2022/01/09 07:35

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でうまくいかない時の原因調査のちょっとしたハック

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

let(:test_post) は test_post が参照されたときに実行されます。
it "つぶやきの内容を取得していること" do の get前に 参照されていないので、作成されていません。
let! にするか
it の後、get の前に test_post と1行入れてください

投稿2022/01/09 09:12

winterboum

総合スコア23376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

F.Iku

2022/01/09 13:18

おっしゃる通り`it の後、get の前に test_post と1行入れてください`を実行すれば解決できました。 letの勉強不足でした。もう一度復習しようと思います。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問