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

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

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

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Q&A

0回答

833閲覧

【Railsチュートリアル9章3-2】assert_equalの実行前後について

MatsuS

総合スコア0

Ruby on Rails

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

0グッド

0クリップ

投稿2021/02/19 20:35

前提・実現したいこと

現在Railsチュートリアルの9.3.2で詰まっています。
assert_equalの実行前後でSession[:user_id]が作成されているようなのですが、まったく理由がわからないです。
完全に自分の力では詰まってしまったのでどなたかご教授いただけると幸いです。

該当のソースコード

Ruby

1test 'current user returns right user when sessions is nil' do 2 assert_not session[:user_id].nil? 3end

をrails testするとredになります。
一方で

Ruby

1test 'current user returns right user when sessions is nil' do 2 assert_equal @user, current_user 3 assert_not session[:user_id].nil? 4end

をrails testするとgreenとなりパスします。
assrt_equalの実行前後で下のテスト結果が変わる(session[:user_id]がnilでなくなる)のはなぜなのでしょうか?

(補足)
Current_userというメゾットは下のようになっていて
このテストではelsif→ifの部分を通っています。
このif以下のlog_inメゾットは下のようになっていて、session[:user_id]が生成されているようです。

Ruby

1def current_user 2 if (user_id = session[:user_id]) 3 @current_user ||= User.find_by(id: user_id) 4 elsif (user_id = cookies.signed[:user_id]) 5 user = User.find_by(id: user_id) 6 if user && user.authenticated?(cookies[:remember_token]) 7 log_in user 8 @current_user = user 9 end 10 end 11 end

Ruby

1def log_in(user) 2 session[:user_id] = user.id 3 end

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

AWSのCloud9を使っています。

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

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

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

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

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

maisumakun

2021/02/19 23:41

「このif以下のlog_inメゾットは下のようになっていて、session[:user_id]が生成されているようです。」と書いているのに、「assrt_equalの実行前後で下のテスト結果が変わる(session[:user_id]がnilでなくなる)のはなぜなのでしょうか?」とまだ疑問が残っているのでしょうか? 質問の中ですでに解決しているように見えます。
MatsuS

2021/02/21 09:13

確かにそうですね。 assert_equalを実行するとSession[:user]が作成されてしまうのはなぜですか?と書くべきでした。 申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問