回答編集履歴

1

編集途中で誤送信してしまったため

2019/02/16 02:52

投稿

mogulla3
mogulla3

スコア60

test CHANGED
@@ -1,11 +1,59 @@
1
1
  見たところ、`current_user` を期待通り取得できていないことが原因のように思います。
2
+
3
+ ブラウザで実際に動かしたときは何らかのユーザでログインしている状態なので、`current_user` には `User` 情報が保持されていますが、テストで動かしているときは未ログイン状態であるので `nil` となっているのかなと。
2
4
 
3
5
 
4
6
 
5
- おそらくブラウザで実際に動かしたとき何らかのユーザでログインしている状態なので、`current_user` には `User` 情報が保持されていますが、テストで動かきは未ログイン状態るので `nil` となってるのかなと。
7
+ ko-uさん今回ログインしていないユーザのテストのだ思いますので、ログインしていない場合はステータスコード401終了すなど処理をcontrollerに挟めば良いかなと思います
6
8
 
7
9
 
8
10
 
11
+ ```ruby
12
+
13
+ def create
14
+
15
+ # ログインしていなかった場合は401ページを表示して終了(※ 401用のテンプレートファイルを作っていないと動きません)
16
+
17
+ if current_user.blank?
18
+
19
+ render(template: 'errors/401', status: 401) and return
20
+
21
+ end
9
22
 
10
23
 
24
+
25
+ @post = current_user.posts.build(post_params)
26
+
27
+ if @post.save
28
+
29
+ flash[:notice] = "投稿が保存されました"
30
+
11
- Rails tutorial
31
+ redirect_to posts_path
32
+
33
+ else
34
+
35
+ redirect_to posts_path
36
+
37
+ flash[:alert] = "投稿に失敗しました"
38
+
39
+ end
40
+
41
+ end
42
+
43
+ ```
44
+
45
+
46
+
47
+ このようにした場合、テストの方も302ではなく401となります。
48
+
49
+
50
+
51
+ ```ruby
52
+
53
+ expect(response).to have_http_status 401
54
+
55
+ ```
56
+
57
+
58
+
59
+ 参考になれば幸いです。