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

質問編集履歴

1

内容がわかるタイトルに変更したこと及び回答のあった件について対応してみた結果の追記

2020/12/27 09:38

投稿

lah
lah

スコア19

title CHANGED
@@ -1,1 +1,1 @@
1
- rspecでログイン状態を再現する方法について
1
+ rspecでログイン状態(session値の設定)を再現する方法について
body CHANGED
@@ -99,4 +99,39 @@
99
99
  ちなみに、ブラウザ情では期待している動作になっておりますので、問題はないかと思います。
100
100
 
101
101
  どんな些細なことでも構いませんので、どなたか教えていただければとても助かります。
102
- よろしくお願いします。
102
+ よろしくお願いします。
103
+
104
+ neko_daisukiさんの回答より
105
+ test_helperを下記のメソッドを追記
106
+ ```testhelper
107
+ def sign_in(user)
108
+ allow_any_instance_of(ActionDispatch::Request).to receive(:session).and_return(user_id: user.id)
109
+ end
110
+ ```
111
+
112
+ ```usersrequestspec
113
+ subject { response }
114
+ let(:user) { FactoryBot.create(:user) }
115
+ # ユーザーがログインしている場合
116
+ context 'The user is logged in' do
117
+ before do
118
+ sign_in(user) ← 修正
119
+ get edit_user_path(user)
120
+ end
121
+ it 'responds successfully' do
122
+ is_expected.to be_successful
123
+ end
124
+
125
+ it 'returns a 200 response' do
126
+ is_expected.to have_http_status(200)
127
+ end
128
+ end
129
+ ```
130
+ rspecを実行した結果
131
+ ![テスト成功状況](74e158476e63874f5b67a62437a13858.png)
132
+ しっかりsessionの値を取得しrenderしていることが確認できます。
133
+
134
+ neko_daisukiさんの記述していただいたコードでは以前と同じログになったため、下記qiitaの記事を参考にしたところ、成功いたしました。
135
+ [request spec で session 値を設定する](https://qiita.com/blueberrystream/items/884d0d23caf50b6553a0)
136
+
137
+ 詳しい挙動等についてはこれから調べるため説明することはできませんが、とりあえず動作することができましたので、同じようにつまづいている方の参考になればと思います。