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

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

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

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

Q&A

0回答

141閲覧

Ruby on Rails 5.1 第4番 10章でグリーンになるはずのテストがREDになる

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/03/15 10:42

Ruby on Rails Tutorial Rails5.1第4番の10章でグリーンになるはずのところでエラーが出ました。
二日試しましたが同じエラーがでてテストがグリーニにならないのでご指導お願いします。

リスト 10.32: フレンドリーフォワーディングを備えたcreateアクション green
app/controllers/sessions_controller.rb

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

rails testでの結果がエラーです。

ec2-user:~/environment/sample_app (updating-users) $ rails test Running via Spring preloader in process 6409 Started with run options --seed 29315 ERROR["test_successful_edit_with_friendly_forwarding", UsersEditTest, 0.17372170799990272] test_successful_edit_with_friendly_forwarding#UsersEditTest (0.17s) NoMethodError: NoMethodError: undefined method `remember' for #<User:0x007fb7d4d4db70> Did you mean? remember_digest app/helpers/sessions_helper.rb:9:in `remember' app/controllers/sessions_controller.rb:14:in `create' test/test_helper.rb:30:in `log_in_as' test/integration/users_edit_test.rb:22:in `block in <class:UsersEditTest>' ERROR["test_unsuccessful_edit", UsersEditTest, 0.18923055100003694] test_unsuccessful_edit#UsersEditTest (0.19s) NoMethodError: NoMethodError: undefined method `remember' for #<User:0x007fb7d4d1cca0> Did you mean? remember_digest app/helpers/sessions_helper.rb:9:in `remember' app/controllers/sessions_controller.rb:14:in `create' test/test_helper.rb:30:in `log_in_as' test/integration/users_edit_test.rb:9:in `block in <class:UsersEditTest>' ERROR["test_login_with_valid_information_followed_by_logout", UsersLoginTest, 0.5369487369998751] test_login_with_valid_information_followed_by_logout#UsersLoginTest (0.54s) NoMethodError: NoMethodError: undefined method `forget' for #<User:0x00000006ae5848> app/helpers/sessions_helper.rb:15:in `forget' app/controllers/sessions_controller.rb:14:in `create' test/integration/users_login_test.rb:20:in `block in <class:UsersLoginTest>' test/controllers/users_controller_test.rb:55:in `block in <class:UsersControllerTest>' ERROR["test_should_redirect_update_when_logged_in_as_wrong_user", UsersControllerTest, 0.5800055469999279] test_should_redirect_update_when_logged_in_as_wrong_user#UsersControllerTest (0.58s) NoMethodError: NoMethodError: undefined method `remember' for #<User:0x00000006c65830> Did you mean? remember_digest app/helpers/sessions_helper.rb:9:in `remember' app/controllers/sessions_controller.rb:14:in `create' test/test_helper.rb:30:in `log_in_as' test/controllers/users_controller_test.rb:40:in `block in <class:UsersControllerTest>' ERROR["test_should_redirect_edit_when_logged_in_as_wrong_user", UsersControllerTest, 0.6058221610001056] test_should_redirect_edit_when_logged_in_as_wrong_user#UsersControllerTest (0.61s)NoMethodError: NoMethodError: undefined method `remember' for #<User:0x00000006d4d838> Did you mean? remember_digest app/helpers/sessions_helper.rb:9:in `remember' app/controllers/sessions_controller.rb:14:in `create' test/test_helper.rb:30:in `log_in_as' test/controllers/users_controller_test.rb:33:in `block in <class:UsersControllerTest>' 29/29: [=] 100% Time: 00:00:00, Time: 00:00:00

該当のソースコード

app/helpers/sessions_helper.rb module SessionsHelper def log_in(user) session[:user_id] = user.id end def remember(user) user.remember # => DB: remember_digest cookies.permanent.signed[:user_id] = user.id cookies.permanent[:remember_token] = user.remember_token end def forget(user) user.forget cookies.delete(:user_id) cookies.delete(:remember_token) end def current_user?(user) user == current_user end def current_user if (user_id = session[:user_id]) @current_user ||= User.find_by(id: user_id) elsif (user_id = cookies.signed[:user_id]) # raise user = User.find_by(id: user_id) if user && user.authenticated?(cookies[:remember_token]) log_in user @current_user = user end end end def logged_in? !current_user.nil? end def log_out forget(current_user) session.delete(:user_id) @current_user = nil end def redirect_back_or(default) redirect_to(session[:forwarding_url] || default) session.delete(:forwarding_url) end def store_location session[:forwarding_url] = request.original_url if request.get? end end class SessionsController < ApplicationController def new end def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) log_in user params[:session][:remember_me] == '1' ? remember(user) : forget(user) redirect_back_or user else flash.now[:danger] = 'Invalid email/password combination' render 'new' end end def destroy log_out redirect_to root_url end end

app/controllers/sessions_controller.rb

class SessionsController < ApplicationController def new end def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) log_in user params[:session][:remember_me] == '1' ? remember(user) : forget(user) redirect_back_or user else flash.now[:danger] = 'Invalid email/password combination' render 'new' end end def destroy log_out redirect_to root_url end end

test/test_helper.rb

ENV['RAILS_ENV'] ||= 'test' require File.expand_path('../../config/environment', __FILE__) require 'rails/test_help' require "minitest/reporters" Minitest::Reporters.use! class ActiveSupport::TestCase # Setup all fixtures in test/fixtures/*.yml for all tests # in alphabetical order. fixtures :all class ActiveSupport::TestCase fixtures :all # テストユーザーがログイン中の場合にtrueを返す def is_logged_in? !session[:user_id].nil? end end # テストユーザーとしてログインする def log_in_as(user) session[:user_id] = user.id end end class ActionDispatch::IntegrationTest # テストユーザーとしてログインする def log_in_as(user, password: 'password', remember_me: '1') post login_path, params: { session: { email: user.email, password: password, remember_me: remember_me } } end end

test/controllers/users_controller_test.rb

ENV['RAILS_ENV'] ||= 'test' require File.expand_path('../../config/environment', __FILE__) require 'rails/test_help' require "minitest/reporters" Minitest::Reporters.use! class ActiveSupport::TestCase # Setup all fixtures in test/fixtures/*.yml for all tests # in alphabetical order. fixtures :all class ActiveSupport::TestCase fixtures :all # テストユーザーがログイン中の場合にtrueを返す def is_logged_in? !session[:user_id].nil? end end # テストユーザーとしてログインする def log_in_as(user) session[:user_id] = user.id end end class ActionDispatch::IntegrationTest # テストユーザーとしてログインする def log_in_as(user, password: 'password', remember_me: '1') post login_path, params: { session: { email: user.email, password: password, remember_me: remember_me } } end end

test/integration/users_login_test.rb

試したこと

controllersに問題がありメソッドが感知されていないもしくは正しく定義されていないのかと思い全角スペースを検索しましたが検出されませんでした。
最終的にyasslab/sample_appsのリポジトリから
app/helpers/sessions_helper.rb
app/controllers/sessions_controller.rb
test/test_helper.rb
test/integration/users_edit_test.rb

の中身をコピーしてみましたが同じ内容のエラーが出ました。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問