teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

SessionsHelper のコードを略さずに記入しました さらに、マークダウン記法を使ってわかりやすく書きました

2020/12/18 08:35

投稿

outmysd
outmysd

スコア3

title CHANGED
File without changes
body CHANGED
@@ -1,20 +1,42 @@
1
+ #困っていること
1
2
  現在、テストされていないブランチで例外を発生させそれをキャッチするという学習を行っています
2
3
  => [railsチュートリアル9章](https://qiita.com/take_webengineer/items/48bb1a43ffac4290959f)
3
4
  本来なら例外をキャッチしたらREDになり、例外を消して再びテストするとGREENになるはずですが、例外を消してテストを行ってもREDになってしまいます。
4
- どなたか解決のために力を貸して頂きたいです。
5
5
 
6
+ おそらく原因は user.rememberにあると思うのですが、どこを治せばいいかわかりません。解決策をご教授いただけないでしょうか
7
+ #使用環境
8
+ OS CentOS8
6
- 具体的には以下のような状態になっています。
9
+ rails '6.0.3'
10
+ AWS cloud9 IDE
11
+
7
12
  ```
13
+ test/helpers/sessions_helper_test.rb:11:in `block in <class:SessionsHelperTest>'
14
+ ```
15
+
16
+ #具体的なエラー
17
+ ```
8
18
  #sessions_helper.rb テストされていないブランチで例外を発生する
19
+
9
20
  module SessionsHelper
10
- *(略)
11
21
 
22
+ # 渡されたユーザーでログインする
23
+ def log_in(user)
24
+ session[:user_id] = user.id
25
+ end
26
+
27
+ # ユーザーのセッションを永続的にする
28
+ def remember(user)
29
+ user.remember
30
+ cookies.permanent.signed[:user_id] = user.id
31
+ cookies.permanent[:remember_token] = user.remember_token
32
+ end
33
+
12
34
  # 記憶トークンcookieに対応するユーザーを返す
13
35
  def current_user
14
36
  if (user_id = session[:user_id])
15
37
  @current_user ||= User.find_by(id: user_id)
16
38
  elsif (user_id = cookies.signed[:user_id])
17
- raise # テストがパスすれば、この部分がテストされていいことがわかる
39
+ raise #意図的例外
18
40
  user = User.find_by(id: user_id)
19
41
  if user && user.authenticated?(cookies[:remember_token])
20
42
  log_in user
@@ -22,6 +44,33 @@
22
44
  end
23
45
  end
24
46
  end
47
+
48
+ # 現在ログイン中のユーザーを返す(いる場合)
49
+ def current_user
50
+ if session[:user_id]
51
+ @current_user ||= User.find_by(id: session[:user_id])
52
+ end
53
+ end
54
+
55
+ # ユーザーがログインしていればtrue、その他ならfalseを返す
56
+ def logged_in?
57
+ !current_user.nil?
58
+ end
59
+
60
+ # 永続的セッションを破棄する
61
+ def forget(user)
62
+ user.forget
63
+ cookies.delete(:user_id)
64
+ cookies.delete(:remember_token)
65
+ end
66
+
67
+ # 現在のユーザーをログアウトする
68
+ def log_out
69
+ forget(current_user)
70
+ session.delete(:user_id)
71
+ @current_user = nil
72
+ end
73
+ end
25
74
  ```
26
75
  rails test=>green
27
76
 
@@ -55,15 +104,27 @@
55
104
 
56
105
  ```
57
106
  #sessions_helper.rb テストされていないブランチで例外を発生する
107
+
58
108
  module SessionsHelper
59
- *(略)
60
109
 
110
+ # 渡されたユーザーでログインする
111
+ def log_in(user)
112
+ session[:user_id] = user.id
113
+ end
114
+
115
+ # ユーザーのセッションを永続的にする
116
+ def remember(user)
117
+ user.remember
118
+ cookies.permanent.signed[:user_id] = user.id
119
+ cookies.permanent[:remember_token] = user.remember_token
120
+ end
121
+
61
122
  # 記憶トークンcookieに対応するユーザーを返す
62
123
  def current_user
63
124
  if (user_id = session[:user_id])
64
125
  @current_user ||= User.find_by(id: user_id)
65
126
  elsif (user_id = cookies.signed[:user_id])
66
- #raiseを削除
127
+ #raiseを削除
67
128
  user = User.find_by(id: user_id)
68
129
  if user && user.authenticated?(cookies[:remember_token])
69
130
  log_in user
@@ -71,6 +132,33 @@
71
132
  end
72
133
  end
73
134
  end
135
+
136
+ # 現在ログイン中のユーザーを返す(いる場合)
137
+ def current_user
138
+ if session[:user_id]
139
+ @current_user ||= User.find_by(id: session[:user_id])
140
+ end
141
+ end
142
+
143
+ # ユーザーがログインしていればtrue、その他ならfalseを返す
144
+ def logged_in?
145
+ !current_user.nil?
146
+ end
147
+
148
+ # 永続的セッションを破棄する
149
+ def forget(user)
150
+ user.forget
151
+ cookies.delete(:user_id)
152
+ cookies.delete(:remember_token)
153
+ end
154
+
155
+ # 現在のユーザーをログアウトする
156
+ def log_out
157
+ forget(current_user)
158
+ session.delete(:user_id)
159
+ @current_user = nil
160
+ end
161
+ end
74
162
  ```
75
163
  rails test=>red ※ここで本来はgreenになるはず
76
164
 
@@ -84,6 +172,7 @@
84
172
  @@ -1 +1 @@
85
173
  -#<User id: 762146111, name: "Michael Example", email: "michael@example.com", created_at: "2020-12-17 14:51:23", updated_at: "2020-12-17 14:51:24", password_digest: [FILTERED], remember_digest: "$2a$04$eDh.bNJMPEpfanPpCKmxZeH6NazYRxH.znN3hkIMDvz...">
86
174
  ```
175
+ #試したこと
87
176
  エラーに関してはこちらで調べましたが解決できませんでした。
88
- current_user に何か原因がありそうなことはわかるのですが....
177
+
89
178
  https://teratail.com/questions/35527