前提・実現したいこと
Railsチュートリアル9章のログイン[remember me] チェックボックスのテストを通したいです。
[remember me]にチェックを入れないでログインするとクッキーが空になるか、テストを行った際にエラーとなりました。
発生している問題・エラーメッセージ
rails6
1 FAIL["test_login_without_remembering", #<Minitest::Reporters::Suite:0x00007f84eda28400 @name="UsersLoginTest">, 5.508636000100523] 2 test_login_without_remembering#UsersLoginTest (5.51s) 3 Expected "_qt4FQyMT-m5mWQfTerKIQ" to be empty. 4 test/integration/users_login_test.rb:73:in `block in <class:UsersLoginTest>'
該当のソースコード
rails6
1(users_login_test.rb) 2 test "login without remembering" do 3 log_in_as(@user, remember_me: '1') 4 delete logout_path 5 log_in_as(@user, remember_me: '0') 6 assert_empty cookies[:remember_token] 7 end
rails6
1(test_helper.rb) 2 def log_in_as(user, password: 'password', remember_me: '1') 3 post login_path, params: { session: { email: user.email, password: password, remember_me: remember_me } } 4 end
rails6
1(sessions_helper.rb) 2 def remember(user) 3 user.remember 4 cookies.permanent.signed[:user_id] = user.id 5 cookies.permanent[:remember_token] = user.remember_token 6 end
rails6
1(user.rb) 2class User < ApplicationRecord 3 attr_accessor :remember_token 4 5 def User.digest(string) 6 cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost # cost = difficulty to calculate hash 7 BCrypt::Password.create(string, cost: cost) 8 end 9 10 def User.new_token 11 SecureRandom.urlsafe_base64 12 end 13 14 def remember 15 self.remember_token = User.new_token 16 update_attribute(:remember_digest, User.digest(remember_token)) 17 end 18 19 def authenticated?(remember_token) 20 return false if remember_digest.nil? 21 BCrypt::Password.new(remember_digest).is_password?(remember_token) 22remember_digest 23 end 24 25 def forget 26 update_attribute(:remember_digest, nil) 27 end 28 29end
試したこと
おそらくエラーメッセージの"_qt4FQyMT-m5mWQfTerKIQ"はremember_tokenだと思いますが、確認する方法がわかりません。
ただ「remember_me: '0'」を「remember_me: '1'」に変更してテストみると別の文字列が出てきたので、'remember_token'のことかと思います。
また、試しにlocalhostでユーザー作成、ログイン、remember_tokenがあるのをチェック、ログアウトしてremember_tokenがないのをチェック、再度ログインすると、remember_tokenが前回と異なるのを確認しましたので、上記の文字列はremember_tokenのことかと思っています。
rails6
1 test "login without remembering" do 2 log_in_as(@user, remember_me: '1') 3 delete logout_path 4 log_in_as(@user, remember_me: '1') 5 assert_empty cookies[:remember_token] 6 end
FAIL["test_login_without_remembering", #<Minitest::Reporters::Suite:0x00007ffa97df0d88 @name="UsersLoginTest">, 6.306830000015907] test_login_without_remembering#UsersLoginTest (6.31s) Expected "BnMHSsJLNCnjY6E6kQLAlw" to be empty. test/integration/users_login_test.rb:73:in `block in <class:UsersLoginTest>'
すみませんが本テストのどこが間違っているのか、ご教授お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。