Ruby on Railsチュートリアルをやっているプログラミング初心者です。
第10章の最後の統合テスト(リスト10.62)を走らせると以下のようにNoMethodErrorが出てしまい、検索しても解決できずに困っています。お力を貸して頂けませんでしょうか。
質問に際して足りない情報があればその点もコメントいただければと思います。
なお、開発環境や言語のバージョンは以下の通りです。
- Ruby 2.4.2
- Rails 5.1.4
- Ubuntu 17.10(たぶん)
- 仮想環境 (VirtualBox + Vagrant) を構築するにあたって「yasslabのRailsチュートリアルスターターキット」を利用しています。
※今後、同様のエラーで困っている方のために、エラーが解決した場合は経緯や問題だった点も含めて判明したことをきちんと報告します(そうされてない方がそれなりにいたので念のため…)。
エラーメッセージ
テストを実行すると以下のメッセージが出ます。
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
あなたの回答
tips
プレビュー