質問編集履歴

1

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

2020/12/18 08:35

投稿

outmysd
outmysd

スコア3

test CHANGED
File without changes
test CHANGED
@@ -1,24 +1,68 @@
1
+ #困っていること
2
+
1
3
  現在、テストされていないブランチで例外を発生させそれをキャッチするという学習を行っています
2
4
 
3
5
  => [railsチュートリアル9章](https://qiita.com/take_webengineer/items/48bb1a43ffac4290959f)
4
6
 
5
7
  本来なら例外をキャッチしたらREDになり、例外を消して再びテストするとGREENになるはずですが、例外を消してテストを行ってもREDになってしまいます。
6
8
 
9
+
10
+
11
+ おそらく原因は user.rememberにあると思うのですが、どこを治せばいいかわかりません。解決策をご教授いただけないでしょうか
12
+
13
+ #使用環境
14
+
15
+ OS CentOS8
16
+
7
- どなたか解決のために力を貸して頂きたいです。
17
+ rails '6.0.3'
8
-
9
-
10
-
18
+
11
- 具体的には以下のような状態になっています。
19
+ AWS cloud9 IDE
20
+
21
+
22
+
23
+ ```
24
+
25
+ test/helpers/sessions_helper_test.rb:11:in `block in <class:SessionsHelperTest>'
26
+
27
+ ```
28
+
29
+
30
+
31
+ #具体的なエラー
12
32
 
13
33
  ```
14
34
 
15
35
  #sessions_helper.rb テストされていないブランチで例外を発生する
16
36
 
37
+
38
+
17
39
  module SessionsHelper
18
40
 
41
+
42
+
43
+ # 渡されたユーザーでログインする
44
+
45
+ def log_in(user)
46
+
47
+ session[:user_id] = user.id
48
+
19
- *(略)
49
+ end
50
+
51
+
52
+
20
-
53
+ # ユーザーのセッションを永続的にする
54
+
21
-
55
+ def remember(user)
56
+
57
+ user.remember
58
+
59
+ cookies.permanent.signed[:user_id] = user.id
60
+
61
+ cookies.permanent[:remember_token] = user.remember_token
62
+
63
+ end
64
+
65
+
22
66
 
23
67
  # 記憶トークンcookieに対応するユーザーを返す
24
68
 
@@ -30,7 +74,7 @@
30
74
 
31
75
  elsif (user_id = cookies.signed[:user_id])
32
76
 
33
- raise # テストがパスすれば、この部分がテストされていいことがわかる
77
+ raise #意図的例外
34
78
 
35
79
  user = User.find_by(id: user_id)
36
80
 
@@ -46,6 +90,60 @@
46
90
 
47
91
  end
48
92
 
93
+
94
+
95
+ # 現在ログイン中のユーザーを返す(いる場合)
96
+
97
+ def current_user
98
+
99
+ if session[:user_id]
100
+
101
+ @current_user ||= User.find_by(id: session[:user_id])
102
+
103
+ end
104
+
105
+ end
106
+
107
+
108
+
109
+ # ユーザーがログインしていればtrue、その他ならfalseを返す
110
+
111
+ def logged_in?
112
+
113
+ !current_user.nil?
114
+
115
+ end
116
+
117
+
118
+
119
+ # 永続的セッションを破棄する
120
+
121
+ def forget(user)
122
+
123
+ user.forget
124
+
125
+ cookies.delete(:user_id)
126
+
127
+ cookies.delete(:remember_token)
128
+
129
+ end
130
+
131
+
132
+
133
+ # 現在のユーザーをログアウトする
134
+
135
+ def log_out
136
+
137
+ forget(current_user)
138
+
139
+ session.delete(:user_id)
140
+
141
+ @current_user = nil
142
+
143
+ end
144
+
145
+ end
146
+
49
147
  ```
50
148
 
51
149
  rails test=>green
@@ -112,11 +210,35 @@
112
210
 
113
211
  #sessions_helper.rb テストされていないブランチで例外を発生する
114
212
 
213
+
214
+
115
215
  module SessionsHelper
116
216
 
217
+
218
+
219
+ # 渡されたユーザーでログインする
220
+
221
+ def log_in(user)
222
+
223
+ session[:user_id] = user.id
224
+
117
- *(略)
225
+ end
226
+
227
+
228
+
118
-
229
+ # ユーザーのセッションを永続的にする
230
+
119
-
231
+ def remember(user)
232
+
233
+ user.remember
234
+
235
+ cookies.permanent.signed[:user_id] = user.id
236
+
237
+ cookies.permanent[:remember_token] = user.remember_token
238
+
239
+ end
240
+
241
+
120
242
 
121
243
  # 記憶トークンcookieに対応するユーザーを返す
122
244
 
@@ -128,7 +250,7 @@
128
250
 
129
251
  elsif (user_id = cookies.signed[:user_id])
130
252
 
131
- #raiseを削除
253
+ #raiseを削除
132
254
 
133
255
  user = User.find_by(id: user_id)
134
256
 
@@ -144,6 +266,60 @@
144
266
 
145
267
  end
146
268
 
269
+
270
+
271
+ # 現在ログイン中のユーザーを返す(いる場合)
272
+
273
+ def current_user
274
+
275
+ if session[:user_id]
276
+
277
+ @current_user ||= User.find_by(id: session[:user_id])
278
+
279
+ end
280
+
281
+ end
282
+
283
+
284
+
285
+ # ユーザーがログインしていればtrue、その他ならfalseを返す
286
+
287
+ def logged_in?
288
+
289
+ !current_user.nil?
290
+
291
+ end
292
+
293
+
294
+
295
+ # 永続的セッションを破棄する
296
+
297
+ def forget(user)
298
+
299
+ user.forget
300
+
301
+ cookies.delete(:user_id)
302
+
303
+ cookies.delete(:remember_token)
304
+
305
+ end
306
+
307
+
308
+
309
+ # 現在のユーザーをログアウトする
310
+
311
+ def log_out
312
+
313
+ forget(current_user)
314
+
315
+ session.delete(:user_id)
316
+
317
+ @current_user = nil
318
+
319
+ end
320
+
321
+ end
322
+
147
323
  ```
148
324
 
149
325
  rails test=>red ※ここで本来はgreenになるはず
@@ -170,8 +346,10 @@
170
346
 
171
347
  ```
172
348
 
349
+ #試したこと
350
+
173
351
  エラーに関してはこちらで調べましたが解決できませんでした。
174
352
 
175
- current_user に何か原因がありそうなことはわかるのですが....
353
+
176
354
 
177
355
  https://teratail.com/questions/35527