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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

2771閲覧

Railsチュートリアル アカウントの有効化のテストが通らない

ken_asano

総合スコア8

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/28 17:29

前提・実現したいこと

現在Rails tutorial の11章を進めているのですが、リスト11.34のテストが通りません。NoMethodError: undefined method log_in for #SessionsController:0x00000000069cc588と繰り返しエラー文が出てしまいます・・・。見た所sessions_helper.rbにはしっかりlog_in(user)と定義しているのですが、上手くいきません。

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

ERROR["test_index_as_admin_including_pagination_and_delete_links", UsersIndexTest, 0.509145019997959]
test_index_as_admin_including_pagination_and_delete_links#UsersIndexTest (0.51s)
NoMethodError: NoMethodError: undefined method  log_in' for #<SessionsController:0x00000000068f17d0> Did you mean? log_in app/controllers/sessions_controller.rb:9:in create'
test/test_helper.rb:24:in log_in_as' test/integration/users_index_test.rb:22:in block in class:UsersIndexTest'

ERROR["test_index_as_non-admin", UsersIndexTest, 0.5241102359941578]
test_index_as_non-admin#UsersIndexTest (0.52s)
NoMethodError: NoMethodError: undefined method  log_in' for #<SessionsController:0x00000000069cc588> Did you mean? log_in app/controllers/sessions_controller.rb:9:in create'
test/test_helper.rb:24:in log_in_as' test/integration/users_index_test.rb:39:in block in class:UsersIndexTest'
.
.
.

39 tests, 62 assertions, 0 failures, 14 errors, 0 skips

該当のソースコード

app/controllers/sessions_controller.rb

rails

1class SessionsController < ApplicationController 2 def new 3 end 4 5 def create 6 user = User.find_by(email: params[:session][:email]) 7 if user && user.authenticate(params[:session][:password]) 8 if user.activated? 9  log_in user 10   params[:session][:remember_me] =='1' ? remember(user) : forget(user) 11 redirect_back_or user 12 else 13 message = "Account not activated. " 14 message += "Check your email for the activation link." 15 flash[:warning] = message 16 redirect_to root_url 17 end 18 else 19 flash.now[:danger] = 'Invalid email/password combination' 20 render 'new' 21 end 22 end 23 24 25 def destroy 26 log_out if logged_in? 27 redirect_to root_url 28 end 29 30end 31

test/test_helper.rb

rails

1ENV['RAILS_ENV'] ||= 'test' 2require File.expand_path('../../config/environment', __FILE__) 3require 'rails/test_help' 4require "minitest/reporters" 5Minitest::Reporters.use! 6 7class ActiveSupport::TestCase 8 # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. 9 fixtures :all 10 11 # Add more helper methods to be used by all tests here... 12 def is_logged_in? 13 !session[:user_id].nil? 14 end 15 16 def log_in_as(user) 17 session[:user_id] = user.id 18 end 19end 20 21 class ActionDispatch::IntegrationTest 22 23 def log_in_as(user, password: 'password', remember_me: '1') 24 post login_path, params: { session: { email: user.email, 25 password: password, 26 remember_me: remember_me } } 27 end 28 end 29

test/integration/users_index_test.rb

rails

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

試したこと

原因と思われるエラーメッセージに記載されているファイルを、Webで公開されている11章が終わった状態のファイルと見比べてみたり、コピペしてみましたが解決致しませんでした。また、調べてみるとapp/controllers/sessions_controller.rbファイルでuserとしているところを@userにしてみると正常に動いたという方がいらっしゃったので試してみましたがダメでした。リスト11.22のrails test:mailersはエラーを吐きませんでした。

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

rails '5.1.6'

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

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

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

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

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

guest

回答1

0

ベストアンサー

app/controllers/sessions_controller.rb

 log_in user   params[:session][:remember_me] =='1' ? remember(user) : forget(user)

行頭の空白のなかに全角空白が混じっています。
プログラミングをする際は、全角空白を可視化できるエディタ・設定を利用することを強くオススメします。

投稿2020/04/28 20:43

asm

総合スコア15149

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

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

ken_asano

2020/04/29 13:03

全角空白になっていました…。今後はミスが起こらぬよう可視化できるように設定しました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問