🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 6

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

Q&A

解決済

1回答

1087閲覧

Railsチュートリアルのログイン[remember me] チェックボックスのテスト

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 6

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

0グッド

0クリップ

投稿2021/01/03 03:12

前提・実現したいこと

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>'

すみませんが本テストのどこが間違っているのか、ご教授お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

上記に記載していないsessions controllerに問題点がありました。

投稿2021/01/04 21:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問