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

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

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

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

Ruby

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

Q&A

0回答

554閲覧

ページネーションがブラウザでは機能しているのに、テストでpaginateメソッドが定義されていないと出てしまいググっても解決できません。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2018/03/12 09:59

編集2022/01/12 10:55

Ruby on Railsチュートリアルをやっているプログラミング初心者です。
第10章の最後の統合テスト(リスト10.62)を走らせると以下のようにNoMethodErrorが出てしまい、検索しても解決できずに困っています。お力を貸して頂けませんでしょうか。
質問に際して足りない情報があればその点もコメントいただければと思います。

なお、開発環境や言語のバージョンは以下の通りです。

 

※今後、同様のエラーで困っている方のために、エラーが解決した場合は経緯や問題だった点も含めて判明したことをきちんと報告します(そうされてない方がそれなりにいたので念のため…)。

 

エラーメッセージ

テストを実行すると以下のメッセージが出ます。 

Ruby

1Error: 2UsersIndexTest#test_index_as_admin_including_pagination_and_delete_links: 3NoMethodError: undefined method `paginate' for #<Class:0x0000559475423858> 4 app/controllers/users_controller.rb:7:in `index' 5 test/integration/users_index_test.rb:12:in `block in <class:UsersIndexTest>' 6

users_controllerのindexアクションで、paginateメソッドが定義されておらず、エラーが出ているのだと思いますが、コードはチュートリアルの通りに書いており、'will_paginate'のGemも問題なくインストールされているはずです(実際に、ブラウザ上ではページネーションは表示&動作しています)。

<ブラウザでの表示>

イメージ説明

 

該当のソースコード

Ruby

1#users_controller.rbのコード 2 3 def index 4 @users = User.paginate(page: params[:page])   #<=7行目 5 end 6

Ruby

1#test/integration/users_index_test.rbのコード 2 3 test "index as admin including pagination and delete links" do 4 log_in_as(@admin) 5 get users_path    #<=12行目 6 assert_template 'users/index' 7 assert_select 'div.pagination' 8 first_page_of_users = User.paginate(page: 1) 9 first_page_of_users.each do |user| 10 assert_select 'a[href=?]', user_path(user), text: user.name 11 unless user == @admin 12 assert_select 'a[href=?]', user_path(user), text: 'delete' 13 end 14 end 15 assert_difference 'User.count', -1 do 16 delete user_path(@non_admin) 17 end 18 end 19

Ruby

1#Gemfile 2 3gem 'will_paginate', '3.1.6' 4gem 'bootstrap-will_paginate', '1.0.0' 5

試したこと

ブラウザではきちんと動作しているのに、テストに失敗している事例を見つけられず、何をすれば解決するのかが分からない状態です…

補足情報

以下は、参考までにエラーのログや関連ファイルの全コードです。

Ruby

1Error: 2UsersIndexTest#test_index_as_admin_including_pagination_and_delete_links: 3NoMethodError: undefined method `paginate' for #<Class:0x0000559475423858> 4 app/controllers/users_controller.rb:7:in `index' 5 test/integration/users_index_test.rb:12:in `block in <class:UsersIndexTest>' 6 7 8/home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:in `method': undefined method `test_index_as_admin_including_pagination_and_delete_links' for class `Minitest::Result' (NameError) 9 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:in `format_rerun_snippet' 10 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:23:in `record' 11 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:803:in `block in record' 12 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:802:in `each' 13 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:802:in `record' 14 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:334:in `run_one_method' 15 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:321:in `block (2 levels) in run' 16 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:320:in `each' 17 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:320:in `block in run' 18 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:360:in `on_signal' 19 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:347:in `with_info_handler' 20 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:319:in `run' 21 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/test_unit/line_filtering.rb:9:in `run' 22 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:159:in `block in __run' 23 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:159:in `map' 24 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:159:in `__run' 25 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:136:in `run' 26 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:63:in `block in autorun' 27 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application.rb:171:in `fork' 28 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application.rb:171:in `serve' 29 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application.rb:141:in `block in run' 30 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application.rb:135:in `loop' 31 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application.rb:135:in `run' 32 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application/boot.rb:19:in `<top (required)>' 33 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' 34 from /home/vagrant/.rbenv/versions/2.4.2/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' 35 from -e:1:in `<main>'

Ruby

1#test/integration/users_index_test.rbのコード 2 3require 'test_helper' 4 5class UsersIndexTest < ActionDispatch::IntegrationTest 6 7 def setup 8 @admin = users(:michael) 9 @non_admin = users(:archer) 10 end 11 12 test "index as admin including pagination and delete links" do 13 log_in_as(@admin) 14 get users_path 15 assert_template 'users/index' 16 assert_select 'div.pagination' 17 first_page_of_users = User.paginate(page: 1) 18 first_page_of_users.each do |user| 19 assert_select 'a[href=?]', user_path(user), text: user.name 20 unless user == @admin 21 assert_select 'a[href=?]', user_path(user), text: 'delete' 22 end 23 end 24 assert_difference 'User.count', -1 do 25 delete user_path(@non_admin) 26 end 27 end 28 29 test "index as non-admin" do 30 log_in_as(@non_admin) 31 get users_path 32 assert_select 'a', text: 'delete', count: 0 33 end 34end 35

Ruby

1#users_controller.rbのコード 2 3class UsersController < ApplicationController 4 before_action :logged_in_user, only: [:index, :edit, :update, :destroy] 5 before_action :correct_user, only: [:edit, :update] 6 before_action :admin_user, only: :destroy 7 8 def index 9 @users = User.paginate(page: params[:page]) 10 end 11 12 def show 13 @user = User.find(params[:id]) 14 end 15 16 def new 17 @user = User.new 18 end 19 20 def create 21 @user = User.new(user_params) 22 if @user.save 23 log_in @user 24 flash[:success] = "Welcome to Progmate!" 25 redirect_to @user 26 else 27 render 'new' 28 end 29 end 30 31 def edit 32 @user = User.find(params[:id]) 33 end 34 35 def update 36 @user = User.find(params[:id]) 37 if @user.update_attributes(user_params) 38 flash[:success] = "Profile updated" 39 redirect_to @user 40 else 41 render 'edit' 42 end 43 end 44 45 def destroy 46 User.find(params[:id]).destroy 47 flash[:success] = "User deleted" 48 redirect_to users_url 49 end 50 51 private 52 53 def user_params 54 params.require(:user).permit(:name, :email, :password, 55 :password_confirmation) 56 end 57 58 # before action 59 60 #ログイン済みのユーザーかどうか確認 61 def logged_in_user 62 unless logged_in? 63 store_location 64 flash[:danger] = "Please log in." 65 redirect_to login_url 66 end 67 end 68 69 #正しいユーザーかどうか確認 70 def correct_user 71 @user = User.find(params[:id]) 72 redirect_to(root_url) unless current_user?(@user) 73 end 74 75 #管理者かどうか確認 76 def admin_user 77 redirect_to(root_url) unless current_user.admin? 78 end 79end 80

Ruby

1#Gemfile 2 3source 'https://rubygems.org' 4 5gem 'rails', '5.1.4' 6gem 'bcrypt', '3.1.11' 7gem 'faker', '1.7.3' 8gem 'will_paginate', '3.1.6' 9gem 'bootstrap-will_paginate', '1.0.0' 10gem 'bootstrap-sass', '3.3.7' 11gem 'puma', '3.9.1' 12gem 'sass-rails', '5.0.6' 13gem 'uglifier', '3.2.0' 14gem 'coffee-rails', '4.2.2' 15gem 'jquery-rails', '4.3.1' 16gem 'turbolinks', '5.0.1' 17gem 'jbuilder', '2.7.0' 18 19group :development, :test do 20 gem 'sqlite3', '1.3.13' 21 gem 'byebug', '9.0.6', platform: :mri 22end 23 24group :development do 25 gem 'web-console', '3.5.1' 26 gem 'listen', '3.1.5' 27 gem 'spring', '2.0.2' 28 gem 'spring-watcher-listen', '2.0.1' 29end 30 31group :test do 32 gem 'rails-controller-testing', '1.0.2' 33 gem 'minitest-reporters', '1.1.14' 34 gem 'guard', '2.13.0' 35 gem 'guard-minitest', '2.4.4' 36end 37 38group :production do 39 gem 'pg', '0.18.4' 40end 41

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問