前提・実現したいこと
現在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'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/29 13:03