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

回答編集履歴

3

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

2021/02/16 00:52

投稿

suama
suama

スコア1997

answer CHANGED
@@ -61,8 +61,8 @@
61
61
  # }
62
62
  # })
63
63
 
64
- # CommentsControllerのspecなので、Boards#createを呼び出せません
64
+ # CommentsControllerのspecなので、BoardsController#createを呼び出せません
65
- # なので、ここで Boards#createmp中でやっているのと同じことを書いて、直に掲示板の
65
+ # なので、ここで BoardsController#create中でやっているのと同じことを書いて、直に掲示板の
66
66
  # データを作成します
67
67
  board_params = {
68
68
  name: "tanaka",

2

誤字をちょっと修正。

2021/02/16 00:52

投稿

suama
suama

スコア1997

answer CHANGED
@@ -27,15 +27,15 @@
27
27
 
28
28
  ここに関しては、どういう処理をしたいかによります。
29
29
 
30
- もし、CommentのデータにはBoadデータは必須であるとか、存在するBoadに関連付けしないといけないとかの制限があれば、何にしてもBoardのデータを1つ用意しないといけませんね。
30
+ もし、CommentのデータにはBoardデータは必須であるとか、存在するBoardに関連付けしないといけないとかの制限があれば、何にしてもBoardのデータを1つ用意しないといけませんね。
31
31
 
32
32
  この時、
33
33
 
34
- - A. BoadController#create経由で作る
34
+ - A. BoardController#create経由で作る
35
- - B. あるいはFactoryBotや直接Boad.create(...)で作る
35
+ - B. あるいはFactoryBotや直接Board.create(...)で作る
36
36
 
37
37
  かで方法は変わります。
38
- もしBoadとCommentのモデルのコードが分かれば、Bの方法でテストの中でBoadのデータを用意することもできます。
38
+ もしBoardとCommentのモデルのコードが分かれば、Bの方法でテストの中でBoardのデータを用意することもできます。
39
39
 
40
40
  ### B案でやってみる
41
41
 

1

specを直してみました。

2021/02/15 15:13

投稿

suama
suama

スコア1997

answer CHANGED
@@ -35,4 +35,64 @@
35
35
  - B. あるいはFactoryBotや直接Boad.create(...)で作る
36
36
 
37
37
  かで方法は変わります。
38
- もしBoadとCommentのモデルのコードが分かれば、Bの方法でテストの中でBoadのデータを用意することもできます。
38
+ もしBoadとCommentのモデルのコードが分かれば、Bの方法でテストの中でBoadのデータを用意することもできます。
39
+
40
+ ### B案でやってみる
41
+
42
+ モデルの情報をいただきましたので、手元で動かせてるわけではないですが、参考までに書いてみます。
43
+ エラーが出るかもしれませんが、あとは1つ1つ確認しながら進めてみてください。
44
+
45
+ ```ruby
46
+ require "rails_helper"
47
+
48
+ # ここで「CommentsControllerについてのテストだよ!」と宣言してます
49
+ RSpec.describe CommentsController, type: :controller do
50
+ describe "comment#create" do
51
+ context "コメントを投稿が成功した場合" do
52
+ before do
53
+ # まずBoardのデータを作る
54
+
55
+ # この方法はダメ!
56
+ # post(:create, params: {
57
+ # board: {
58
+ # name: 'tanaka',
59
+ # title: 'Ruby on Rails 5',
60
+ # body: 'Hello Rails',
61
+ # }
62
+ # })
63
+
64
+ # CommentsControllerのspecなので、Boards#createを呼び出せません
65
+ # なので、ここで Boards#createmp中でやっているのと同じことを書いて、直に掲示板の
66
+ # データを作成します
67
+ board_params = {
68
+ name: "tanaka",
69
+ title: "Ruby on Rails 5",
70
+ body: "Hello Rails",
71
+ }
72
+ # new -> saveを同時に処理しています
73
+ @board = Board.create!(board_params)
74
+
75
+ # ここからがCommentsController#create への本来のPOST
76
+ # postのあとにパラメータを添えるだけでよいです
77
+ # パラメータは入れ子になるので注意
78
+ @comment = FactoryBot.build(:comment)
79
+ post :create, params: {
80
+ comment: {
81
+ board_id: @board.id,
82
+ name: @comment.name,
83
+ comment: @comment.comment,
84
+ },
85
+ }
86
+ end
87
+
88
+ it "掲示板のコメント欄にリダイクトされること" do
89
+ # @comment.board は、実際はコメントに紐付けた@boardと同じになるはず
90
+ # redirect_to のあとは実際のパスの形式でないと多分ダメ
91
+ # これは多分エラー
92
+ # expect(response).to redirect_to @comment.board
93
+ expect(response).to redirect_to "/boards/#{@board.id}"
94
+ end
95
+ end
96
+ end
97
+ end
98
+ ```