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

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

ただいまの
回答率

87.59%

Railsチュートリアル13章Expected at least 1 element matching "div.pagination", found 0..

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,660

テストを実施していますが
エラーメッセージが出てつまずいています。

#microposts_interface_test.rb

require 'test_helper'

class MicropostsInterfaceTest < ActionDispatch::IntegrationTest

  def setup
    @user = users(:michael)
  end

  test "micropost interface" do
    log_in_as(@user)
    get root_path
    assert_select 'div.pagination' #<=ここでfail発生
    # 無効な送信
    assert_no_difference 'Micropost.count' do
      post microposts_path, params: { micropost: { content: "" } }
    end
    assert_select 'div#error_explanation'
    # 有効な送信
    content = "This micropost really ties the room together"
    assert_difference 'Micropost.count', 1 do
      post microposts_path, params: { micropost: { content: content } }
    end
    assert_redirected_to root_url
    follow_redirect!
    assert_match content, response.body
    # 投稿を削除する
    assert_select 'a', text: 'delete'
    first_micropost = @user.microposts.paginate(page: 1).first
    assert_difference 'Micropost.count', -1 do
      delete micropost_path(first_micropost)
    end
    # 違うユーザーのプロフィールにアクセス (削除リンクがないことを確認)
    get user_path(users(:archer))
    assert_select 'a', text: 'delete', count: 0
  end
  test "micropost sidebar count" do
    log_in_as(@user)
    get root_path
    assert_match "#{@user.microposts.count} microposts", response.body
    # まだマイクロポストを投稿していないユーザー
    other_user = users(:malory)
    log_in_as(other_user)
    get root_path
    assert_match "0 microposts", response.body
    other_user.microposts.create!(content: "A micropost")
    get root_path
    assert_match "1 micropost", response.body
  end
end
#microposts.yml
orange:
  content: "I just ate an orange!"
  created_at: <%= 10.minutes.ago %>
  user: michael

tau_manifesto:
  content: "Check out the @tauday site by @mhartl: http://tauday.com"
  created_at: <%= 3.years.ago %>
  user: michael

cat_video:
  content: "Sad cats are sad: http://youtu.be/PKffm2uI4dk"
  created_at: <%= 2.hours.ago %>
  user: michael

most_recent:
  content: "Writing a short test"
  created_at: <%= Time.zone.now %>
  user: michael

#13.27
<% 30.times do |n| %>
micropost_<%= n %>:
  content: <%= Faker::Lorem.sentence(5) %>
  created_at: <%= 42.days.ago %>
  user: michael
<% end %>

ants:
  content: "Oh, is that what you want? Because that's how you get ants!"
  created_at: <%= 2.years.ago %>
  user: archer

zone:
  content: "Danger zone!"
  created_at: <%= 3.days.ago %>
  user: archer

tone:
  content: "I'm sorry. Your words made sense, but your sarcastic tone did not."
  created_at: <%= 10.minutes.ago %>
  user: lana

van:
  content: "Dude, this van's, like, rolling probable cause."
  created_at: <%= 4.hours.ago %>
  user: lana
#microposts_controller.rb
class MicropostsController < ApplicationController
  before_action :logged_in_user, only: [:create, :destroy]
  before_action :correct_user,   only: :destroy #13.52

  def create
    @micropost = current_user.microposts.build(micropost_params)
    if @micropost.save
      flash[:success] = "Micropost created!"
      redirect_to root_url
    else
      @feed_items = current_user.feed.paginate(page: params[:page])
      render 'static_pages/home'
    end
  end

  def destroy 
    @micropost.destroy
    flash[:success] = "Micropost deleted"
    redirect_to request.referrer || root_url
  end

  private
    def micropost_params
      params.require(:micropost).permit(:content)
    end

    def correct_user
      @micropost = current_user.microposts.find_by(id: params[:id])
      redirect_to root_url if @micropost.nil?
    end
end
#show.html.erb
<% provide(:title, @user.name) %>
<div class="row">
  <aside class="col-md-4">
    <section class="user_info">
      <h1>
        <%= gravatar_for @user %>
        <%= @user.name %>
      </h1>
    </section>
  </aside>

  <div class="col-md-8">
  <%# <div class="div.col-md-8"> %>
    <% if @user.microposts.any? %>
      <h3>Microposts (<%= @user.microposts.count %>)</h3>
      <ol class="microposts">
      <%# </ol.class="microposts"> %>
        <%= render @microposts %>
      </ol>
      <%# </ol.class> %>
      <%= will_paginate @microposts %>
    <% end %>
  </div>
</div>

エラーメッセージ

FAIL["test_micropost_interface", MicropostsInterfaceTest, 0.8189151930000662]
 test_micropost_interface#MicropostsInterfaceTest (0.82s)
        Expected at least 1 element matching "div.pagination", found 0..
        Expected 0 to be >= 1.
        test/integration/microposts_interface_test.rb:13:in `block in <class:MicropostsInterfaceTest>'

実際にサイトに表示すると、ページネーションは機能していました。
ご教授頂けると幸いです。
よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

こんばんは。

実際にサイトに表示すると、ページネーションは機能していました。

とありますが、テストではなく、developmentモードで起動してブラウザで見た時にはページング用のリンクなどが表示されているということですね。

可能なら、ページングの部品が表示されている状態で、HTMLのソースがどうなっているか確認してみてください。
ブラウザの開発者ツールや、「ページのソースを表示」といったメニューで確認できると思います。

テストで指定している div.pagination は、HTMLの中に<div class="pagination">....という要素が存在することを想定しています。

実際に表示した際のページングのリンク付近に、<div class="pagination">.... というタグがあれば、なにかほかにも問題があるのかもしれません。
(fixturesで記載したテストデータが登録されていないとか)

逆に、実際に表示した際には、ページングのリンクなどは存在しても<div class="pagination">.... というタグが見当たらないのだとすると、テストをちょっと修正するかなにかが必要かと思います。

差し支えなければ、結果を教えていただけると嬉しいです。

こちらの質問ももしかしたら近いのかな?とは思っています。
https://teratail.com/questions/213274

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/04 00:13

    早速のコメントありがとうございます
    問題が見つかりました!

    home.html.erb
    ```
    <% if logged_in? %>
    <%= render 'static_pages/home_logged_in' %>
    <% else %>
    <%= render 'static_pages/home_not_logged_in' %>
    <% end %>
    ```

    _home_logged_in.html.erb
    ```
    <div class="row">
    <aside class="col-md-4">
    <section class="user_info">
    <%= render 'shared/user_info' %>
    </section>
    <section>
    <%= render 'shared/micropost_form' %>
    </section>
    </aside>
    <div class="col-md-8">
    <h3>Micropost Feed</h3>
    <%= render 'shared/feed' %>
    </div>
    </div>
    ```

    home_logged_in.html.erbの
    <div class="col-md-8">
    <h3>Micropost Feed</h3>
    <%= render 'shared/feed' %>
    </div>
    が抜けておりました
    show.html.erbばかり見てました

    お陰さまで前に進めそうです( ^∀^)

    キャンセル

  • 2019/10/04 07:08

    よかったですね!

    キャンセル

  • 2019/10/04 07:57

    @suama さん
    ありがとうございました!!

    キャンセル

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

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る