railsチュートリアルで該当のテストコードが実行できる理由がわからない。

実現したいこと

該当コードの理解とテストの走る理由が知りたいです。

発生している問題・分からないこと

テストコードで

ruby

1require "test_helper"2 3class SessionsHelperTest < ActionView::TestCase4 5 def setup6 @user = users(:michael)7 remember(@user)8 end9 10 test "current_user returns right user when session is nil" do11 assert_equal @user, current_user 12 assert is_logged_in?13 end

以上のテストコードのcurrent_user returns right user when session is nil
のテストが何故通る前提なのかわかりません。rememberメソッドもcurrent_user のどちらもtest_helper内に存在しませんし仮に使えてもrememberメソッドはDBのremember_digestにデータを更新するメソッドですしcurrent_userも事前にセッションかクッキー情報を持たせる処理がないとユーザーデータを返せる処理ではないと考えています。(現にテストを走らせるとcurrent_userはnilが返ってきます。)
これはどういう事なのでしょうか。何か自分の認識が間違っていたらすみません。

該当のソースコード

sessions_helper.rb

1require "test_helper" 2 3class SessionsHelperTest < ActionView::TestCase 4 5 def setup 6 @user = users(:michael) 7 remember(@user) 8 end 9 10 test "current_user returns right user when session is nil" do 11 assert_equal @user, current_user 12 assert is_logged_in? 13 end

test_helper.rb

1# frozen_string_literal: true 2 3ENV['RAILS_ENV'] ||= 'test' 4require_relative '../config/environment' 5require 'rails/test_help' 6require 'minitest/reporters' 7Minitest::Reporters.use! 8 9module ActiveSupport 10 class TestCase 11 parallelize(workers: :number_of_processors) 12 fixtures :all 13 14 def logged_in? 15 session[:user_id].present? 16 end 17 18 def log_in_as(user) 19 session[:user_id] = user.id 20 end 21 end 22end 23 24module ActionDispatch 25 class IntegrationTest 26 27 def logged_in? 28 session[:user_id].present? 29 end 30 31 def log_in_as(user, password: 'password', remember_me: '1') 32 post login_path, params: { session: { email: user.email, 33 password: password, 34 remember_me: remember_me } } 35 end 36 end 37end 38 39module ActionDispatch 40 class IntegrationTest 41 def log_in_as(user, password: 'password', remember_me: '1') 42 post login_path, params: { session: { email: user.email, 43 password:, 44 remember_me: } } 45 end 46 include ApplicationHelper 47 end 48end 49

ApplicationHelper.rb

1# frozen_string_literal: true 2 3class ApplicationHelperTest < ActionView::TestCase 4 test 'full title helper' do 5 assert_equal 'Ruby on Rails Tutorial Sample App', full_title 6 assert_equal 'Help | Ruby on Rails Tutorial Sample App', full_title('Help') 7 end 8end

def remember self.remember_token = User.new_token update(remember_digest: User.digest(remember_token)) remember_digest end def current_user if (user_id = session[:user_id]) user = User.find_by(id: user_id) @current_user = user if user # && session[:session_token] == user.session_token elsif (user_id = cookies.encrypted[:user_id]) user = User.find_by(id: user_id) if user&.authenticated?(cookies[:remember_token]) log_in user @current_user = user end end end

試したこと・調べたこと

上記の詳細・結果

特に情報が無く、わからなかったです。

補足

特になし

コメントを投稿

0 コメント