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

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

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

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

RSpec

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

Ruby on Rails

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

821閲覧

Rspecで expected "Microposts" to include ""のエラー

amby

総合スコア40

Ruby

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

RSpec

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

Ruby on Rails

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/08/26 23:30

編集2020/08/27 11:43

起きている現象と実現したいこと

独学でRspecでテストを書いています。
エラーが発生しており、おそらくRspecの書き方自体が間違っているのではないかと思うのですが、修正箇所が分からず、教えていただきたいです。

エラー内容(ターミナル)

Failures: 1) 投稿機能 一覧表示機能 ユーザーAがログインしている時 ユーザーAが作成したタスクが表示される Failure/Error: expect(page).to have_title '最初の投稿' expected "Microposts" to include "最初の投稿" [Screenshot]: tmp/screenshots/failures_r_spec_example_groups_nested_nested_a_ユーザーaが作成したタスクが表示される_916.png # ./spec/system/microposts_spec.rb:22:in `block (4 levels) in <top (required)>' Finished in 7.15 seconds (files took 3.36 seconds to load) 1 example, 1 failure Failed examples: rspec ./spec/system/microposts_spec.rb:20 # 投稿機能 一覧表示機能 ユーザーAがログインしている時 ユーザーAが作成したタスクが表示される

microposts_spec.rb

require 'rails_helper' describe '投稿機能', type: :system do describe '一覧表示機能' do before do #ユーザーAを作成しておく user_a = FactoryBot.create(:user, name:'ユーザーA', email: 'a@gmail.com') #作成者がユーザーAであるタスクを作成しておく FactoryBot.create(:micropost, title: '最初の投稿', user: user_a) end context 'ユーザーAがログインしている時' do before do #ユーザーAでログインする visit login_path fill_in 'メールアドレス', with: 'a@gmail.com' fill_in 'パスワード', with: 'password' click_button 'ログイン' end it 'ユーザーAが作成したタスクが表示される' do #作成済みの投稿の名称が画面上に表示されていることを確認 expect(page).to have_title '最初の投稿' end end end end

投稿一覧表示のページ

<%# 投稿一覧を表示するページです %> <body class="after_login_back"> <%= render 'microposts/searching', q: @q %> <% @microposts.each do |micropost| %> <%= render 'microposts/microposts', micropost: micropost %> <% end %> <%= link_to new_micropost_path, class: 'new_button' do%><i class="fas fa-edit"></i><%end%> <%= paginate @microposts%> <%= render 'layouts/return' %> </body>

_microposts.html.erb

<div class="card micropost_card col-sm-9"> <div class="posts"> <div class="card_left"> <% if micropost.image? %> <%= image_tag micropost.image.url, class:"micropost_image" %> <% else %> <%= image_tag 'no_image.png', class:"micropost_image" %> <% end %> </div> <div class="card_center"> <%= link_to micropost.title, micropost_path(micropost), class: 'micropost_title' %> <table class="table"> <tr> <td>日程  :</td> <td><%= micropost.day %></td> </tr> <tr> <td>場所  :</td> <td><%= micropost.place %></td> </tr> <tr> <td>募集人数:</td> <td><%= micropost.number %></td> </tr> </table> </div> <div class="card_right"> <% if micropost.joins.count < micropost.number %> <% if current_user.joining?(micropost) %> <%= form_with(model: current_user.joins.find_by(micropost_id: micropost.id), local: true, method: :delete) do |f| %> <%= hidden_field_tag :micropost_id, micropost.id %> <%= f.submit '参加中', class: 'side_btn_delete' %> <% end %> <% else %> <%= form_with(model: current_user.joins.build, local: true) do |f| %> <%= hidden_field_tag :micropost_id, micropost.id %> <%= f.submit '参加', class: 'side_btn' %> <% end %> <% end %> <% else %> <P class="side_btn_fin">定員到達</P> <%end%> <% if current_user.liking?(micropost) %> <%= form_with(model: current_user.likes.find_by(micropost_id: micropost.id), local: true, method: :delete) do |f| %> <%= hidden_field_tag :micropost_id, micropost.id %> <%= f.submit '気になる済', class: 'side_btn_delete' %> <% end %> <% else %> <%= form_with(model: current_user.likes.build, local: true) do |f| %> <%= hidden_field_tag :micropost_id, micropost.id %> <%= f.submit '気になる', class: 'side_btn' %> <% end %> <% end %> <% if current_user == micropost.user %> <%= link_to "編集", edit_micropost_path(micropost) ,class: 'side_btn' %> <%= link_to "削除", micropost, method: :delete, data: {confirm: "本当に削除しますか?"}, class: 'side_btn' %> <% end %> </div> </div> </div>

micropostsコントローラーindexアクション

def index @q = Micropost.where("day >?", Date.today).order(created_at: :desc).ransack(params[:q]) @microposts = @q.result(distinct: true).page(params[:page]).per(10) end

Factory.Botの内容

FactoryBot.define do factory :micropost do content {'テストを書く'} # image {'test.png'} user end end
FactoryBot.define do factory :user do name {'テストユーザー'} email {'test@example.com'} image {'profile.png'} password {'password'} profile {'テストです'} end end

試してみたこと

・expected "Microposts" to include "最初の投稿" を記述してみる
・pageをmicropostsに変えてみる

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

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

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

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

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

guest

回答1

0

ベストアンサー

have_title<title>要素のマッチャなので

ruby

1# 作成済みの投稿の名称のリンクが画面上に表示されていることを確認 2expect(page).to have_link '最初の投稿'

こうかと思います

投稿2020/08/26 23:41

asm

総合スコア15147

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

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

amby

2020/08/27 11:42

ありがとうございます。ただlinkに直してみたのですが、 expected to find link "最初の投稿" but there were no matchesという表示が出てしまいます。。。
amby

2020/08/27 11:44

FactoryBotも追記しました。もしかしたらここから間違いがあるのでしょうか?
asm

2020/08/27 13:20 編集

うーん ログインできているか・投稿が表示されているかを page.save_screenshot('screenshot.png') などで確認してください。 > @q = Micropost.where("day >?", Date.today).order(created_at: :desc).ransack(params[:q]) 3点気になります。 - テストデータにdayについて記述がないこと - where("day >?", Date.today)の意図がよくわからないが当日分が抜ける仕様は正しいのか - Date.todayはタイムゾーンを考慮しないのでズレるかも
amby

2020/08/27 23:22

ありがとうございます。今一度、修正チャレンジしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問