回答編集履歴

3

コメント文の誤字をちょっと修正。

2021/02/16 00:52

投稿

suama
suama

スコア1997

test CHANGED
@@ -124,9 +124,9 @@
124
124
 
125
125
 
126
126
 
127
- # CommentsControllerのspecなので、Boards#createを呼び出せません
127
+ # CommentsControllerのspecなので、BoardsController#createを呼び出せません
128
128
 
129
- # なので、ここで Boards#createmp中でやっているのと同じことを書いて、直に掲示板の
129
+ # なので、ここで BoardsController#create中でやっているのと同じことを書いて、直に掲示板の
130
130
 
131
131
  # データを作成します
132
132
 

2

誤字をちょっと修正。

2021/02/16 00:52

投稿

suama
suama

スコア1997

test CHANGED
@@ -56,7 +56,7 @@
56
56
 
57
57
 
58
58
 
59
- もし、CommentのデータにはBoadデータは必須であるとか、存在するBoadに関連付けしないといけないとかの制限があれば、何にしてもBoardのデータを1つ用意しないといけませんね。
59
+ もし、CommentのデータにはBoardデータは必須であるとか、存在するBoardに関連付けしないといけないとかの制限があれば、何にしてもBoardのデータを1つ用意しないといけませんね。
60
60
 
61
61
 
62
62
 
@@ -64,15 +64,15 @@
64
64
 
65
65
 
66
66
 
67
- - A. BoadController#create経由で作る
67
+ - A. BoardController#create経由で作る
68
68
 
69
- - B. あるいはFactoryBotや直接Boad.create(...)で作る
69
+ - B. あるいはFactoryBotや直接Board.create(...)で作る
70
70
 
71
71
 
72
72
 
73
73
  かで方法は変わります。
74
74
 
75
- もしBoadとCommentのモデルのコードが分かれば、Bの方法でテストの中でBoadのデータを用意することもできます。
75
+ もしBoardとCommentのモデルのコードが分かれば、Bの方法でテストの中でBoardのデータを用意することもできます。
76
76
 
77
77
 
78
78
 

1

specを直してみました。

2021/02/15 15:13

投稿

suama
suama

スコア1997

test CHANGED
@@ -73,3 +73,123 @@
73
73
  かで方法は変わります。
74
74
 
75
75
  もしBoadとCommentのモデルのコードが分かれば、Bの方法でテストの中でBoadのデータを用意することもできます。
76
+
77
+
78
+
79
+ ### B案でやってみる
80
+
81
+
82
+
83
+ モデルの情報をいただきましたので、手元で動かせてるわけではないですが、参考までに書いてみます。
84
+
85
+ エラーが出るかもしれませんが、あとは1つ1つ確認しながら進めてみてください。
86
+
87
+
88
+
89
+ ```ruby
90
+
91
+ require "rails_helper"
92
+
93
+
94
+
95
+ # ここで「CommentsControllerについてのテストだよ!」と宣言してます
96
+
97
+ RSpec.describe CommentsController, type: :controller do
98
+
99
+ describe "comment#create" do
100
+
101
+ context "コメントを投稿が成功した場合" do
102
+
103
+ before do
104
+
105
+ # まずBoardのデータを作る
106
+
107
+
108
+
109
+ # この方法はダメ!
110
+
111
+ # post(:create, params: {
112
+
113
+ # board: {
114
+
115
+ # name: 'tanaka',
116
+
117
+ # title: 'Ruby on Rails 5',
118
+
119
+ # body: 'Hello Rails',
120
+
121
+ # }
122
+
123
+ # })
124
+
125
+
126
+
127
+ # CommentsControllerのspecなので、Boards#createを呼び出せません
128
+
129
+ # なので、ここで Boards#createmp中でやっているのと同じことを書いて、直に掲示板の
130
+
131
+ # データを作成します
132
+
133
+ board_params = {
134
+
135
+ name: "tanaka",
136
+
137
+ title: "Ruby on Rails 5",
138
+
139
+ body: "Hello Rails",
140
+
141
+ }
142
+
143
+ # new -> saveを同時に処理しています
144
+
145
+ @board = Board.create!(board_params)
146
+
147
+
148
+
149
+ # ここからがCommentsController#create への本来のPOST
150
+
151
+ # postのあとにパラメータを添えるだけでよいです
152
+
153
+ # パラメータは入れ子になるので注意
154
+
155
+ @comment = FactoryBot.build(:comment)
156
+
157
+ post :create, params: {
158
+
159
+ comment: {
160
+
161
+ board_id: @board.id,
162
+
163
+ name: @comment.name,
164
+
165
+ comment: @comment.comment,
166
+
167
+ },
168
+
169
+ }
170
+
171
+ end
172
+
173
+
174
+
175
+ it "掲示板のコメント欄にリダイクトされること" do
176
+
177
+ # @comment.board は、実際はコメントに紐付けた@boardと同じになるはず
178
+
179
+ # redirect_to のあとは実際のパスの形式でないと多分ダメ
180
+
181
+ # これは多分エラー
182
+
183
+ # expect(response).to redirect_to @comment.board
184
+
185
+ expect(response).to redirect_to "/boards/#{@board.id}"
186
+
187
+ end
188
+
189
+ end
190
+
191
+ end
192
+
193
+ end
194
+
195
+ ```