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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

2回答

819閲覧

RAILS_ENV=test時のみ、paginateメソッドがundefinedになる

mesh1nek0x0

総合スコア9

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2018/08/04 23:39

前提・実現したいこと

以下のrailsチュートリアルのページネーション機能を進めております。
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-pagination

サーバを起動して、ページネーションは機能したのですが
いざ、そのテストを書いて(リスト10.4.8)実行すると
さきほどは動作したpaginateメソッドの記述部分がundefinedと表示されました。

test環境時でも当該メソッドを使えるようにするにはどのあたりを確認するとよいでしょうか?

発生している問題・エラーメッセージ

Error: UsersIndexTest#test_index_including_pagination: NoMethodError: undefined method `paginate' for #<Class:0x00007ffd24ac4b20> app/controllers/users_controller.rb:6:in `index' test/integration/users_index_test.rb:11:in `block in <class:UsersIndexTest>'

該当のソースコード

テスト時にエラーになるコード

ruby

1class UsersController < ApplicationController 2 before_action :logged_in_user, only: [:index, :edit, :update] 3 before_action :correct_user, only: [:edit, :update] 4 5 def index 6 @users = User.paginate(page: params[:page]) 7 end

テストコード

ruby

1require 'test_helper' 2 3class UsersIndexTest < ActionDispatch::IntegrationTest 4 5 def setup 6 @user = users(:michael) 7 end 8 9 test "index including pagination" do 10 log_in_as(@user) 11 get users_path 12 assert_template 'users/index' 13 assert_select 'div.pagination' 14 User.paginate(page: 1).each do |user| 15 assert_select 'a[href=?]', user_path(user), text: user.name 16 end 17 end 18end

試したこと

  • gemの削除とbundleの再インストール
  • rails consoleでdevelopment/testのRAILS_ENVでpaginateが使えるか検証
$ rails console Running via Spring preloader in process 63328 Loading development environment (Rails 5.1.4) irb(main):001:0> User.paginate(page: 1, per_page:1) User Load (3.0ms) SELECT "users".* FROM "users" LIMIT ? OFFSET ? [["LIMIT", 1], ["OFFSET", 0]] (0.5ms) SELECT COUNT(*) FROM "users" ...(略) $ RAILS_ENV=test rails console Running via Spring preloader in process 63394 Loading test environment (Rails 5.1.4) irb(main):001:0> User.paginate(page: 1, per_page:1) NoMethodError: undefined method `paginate' for User (call 'User.connection' to establish a connection):Class from (irb):1

補足情報(FW/ツールのバージョンなど)

  • ruby:ruby 2.4.2p198
  • rails:5.1.4

Gemfile

ruby

1source 'https://rubygems.org' 2 3gem 'rails', '5.1.4' 4gem 'bcrypt', '3.1.11' 5gem 'faker', '1.7.3' 6gem 'will_paginate', '~> 3.0.4' 7gem 'bootstrap-will_paginate', '1.0.0' 8gem 'bootstrap-sass', '3.3.7' 9gem 'puma', '3.9.1' 10gem 'sass-rails', '5.0.6' 11gem 'uglifier', '3.2.0' 12gem 'coffee-rails', '4.2.2' 13gem 'jquery-rails', '4.3.1' 14gem 'turbolinks', '5.0.1' 15gem 'jbuilder', '2.7.0' 16 17group :development, :test do 18 gem 'sqlite3', '1.3.13' 19 gem 'byebug', '9.0.6', platform: :mri 20end 21 22group :development do 23 gem 'web-console', '3.5.1' 24 gem 'listen', '3.1.5' 25 gem 'spring', '2.0.2' 26 gem 'spring-watcher-listen', '2.0.1' 27end 28 29group :test do 30 gem 'rails-controller-testing', '1.0.2' 31 gem 'minitest-reporters', '1.1.14' 32 gem 'guard', '2.13.0' 33 gem 'guard-minitest', '2.4.4' 34end 35 36group :production do 37 gem 'pg', '0.20.0' 38end 39 40# Windows環境ではtzinfo-dataというgemを含める必要があります 41gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

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

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

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

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

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

guest

回答2

0

ベストアンサー

ちょっと謎な状況ですね…。特に変わったことがなければtest環境でもNoMethodErrorにはならなさそうに思うのですが。

RAILS_ENV=test rails consoleまたはrails console testで、

User.count User.connected?

などと実行したら、どんな答えが返ってきますか? (後者はtrueになるはずです)

投稿2018/08/05 11:29

takahashim

総合スコア1877

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

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

mesh1nek0x0

2018/08/06 14:46

レスありがとうございます!おっしゃる通り、NoMethodErrorにはならなさそうでどこに目をつけたら...という感じでした ???? consoleの実行結果は以下の通りでした! ``` $ rails console test Running via Spring preloader in process 65227 Loading test environment (Rails 5.1.4) irb(main):001:0> User.count (0.1ms) SELECT COUNT(*) FROM "users" => 34 irb(main):002:0> User.connected? => true ```
takahashim

2018/08/06 15:48 編集

回答ありがとうございます。うーん、これだけ正常そうですね…。 では、Gemfileのwill_paginateについて、 gem 'will_paginate', '3.1.5' にしてみて、bundle installとspring stopしてから改めて実行してみるとどうでしょうか?
mesh1nek0x0

2018/08/07 00:24

再びレスありがとうございます! >gem 'will_paginate', '3.1.5' 他のページを参考にバージョンを変えてみていたりしてそのままでした...。 こちら spring stopで改めて実行したら無事に動きましたー!!!!! railsにはプリローダーというものがあるのですね...、これは私の学が浅かったです;; processが残ってしまっていて、testで実行しているものだけ読み込まれていない状況だったと考えればつじつまが合いますし、非常に納得しました! 改めましてありがとうございました :)
takahashim

2018/08/07 03:22

なるほどspringのせいだったんですね。解決できてよかったです!
guest

0

違ってたら申し訳ないですが、

group :development, :test do gem 'sqlite3', '1.3.13' gem 'byebug', '9.0.6', platform: :mri end

でdevelopment環境のデータベースのアダプターを指定していますが、
test環境は指定しなくても大丈夫でしょうか?

投稿2018/08/05 14:02

satoshih

総合スコア797

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

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

mesh1nek0x0

2018/08/06 14:55

ありがとうございます! gemを追加して、いったんgemを削除してbundle installし直してみましたが、改善しませんでした ????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問