質問編集履歴
6
自己解決した経緯について追記・タイトルの修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
r
|
1
|
+
rspecで発生するlib/rack/session/abstract/id.rb:375:in 'commit_sesion'の解決方法について
|
test
CHANGED
@@ -313,3 +313,61 @@
|
|
313
313
|
結果、何も変わりませんでした。
|
314
314
|
|
315
315
|
これも何かの参考になればと追記いたしました。
|
316
|
+
|
317
|
+
|
318
|
+
|
319
|
+
|
320
|
+
|
321
|
+
|
322
|
+
|
323
|
+
-----------自己解決について-----------------
|
324
|
+
|
325
|
+
|
326
|
+
|
327
|
+
結論:実行環境が異なっていたこと
|
328
|
+
|
329
|
+
|
330
|
+
|
331
|
+
|
332
|
+
|
333
|
+
|
334
|
+
|
335
|
+
rspecのログ画像を確認して頂きたいが、
|
336
|
+
|
337
|
+
```log
|
338
|
+
|
339
|
+
lib/rack/session/abstract/id.rb:375:in 'commit_sesion'
|
340
|
+
|
341
|
+
```
|
342
|
+
|
343
|
+
と記述されている。このコードは下記画像の通りとなる
|
344
|
+
|
345
|
+
![commit_session](9f0e4f5af83cd8d3b47439b1e7a05537.png)
|
346
|
+
|
347
|
+
ログからもoptionsメソッドが未定義となっており、なんらかの形で定義できない現象が発生している。
|
348
|
+
|
349
|
+
このコードを遡り読み解いた限り(初学者なため間違えている可能性あり)
|
350
|
+
|
351
|
+
「requestを飛ばした際に、headerにHTTPリクエストと環境情報を渡している」
|
352
|
+
|
353
|
+
ことが分かった。
|
354
|
+
|
355
|
+
rspecのログではpatchリクエストは正常に動作していることから、環境情報に問題があるのではないか?と仮説を立てる。
|
356
|
+
|
357
|
+
とても初歩的で恥ずかしいが、rspecはどの環境で動作しているのか把握しておらず、検索したところ
|
358
|
+
|
359
|
+
「環境情報を指定しない限りはtest環境で動作する」
|
360
|
+
|
361
|
+
となっていた。そもそもtest用のDBやmigrateを行った記憶がなかった。
|
362
|
+
|
363
|
+
実際に実行してみるとエラーとなり、test環境のDBがcreateできない状態となっておりました。(docker環境)
|
364
|
+
|
365
|
+
今までrspecがdevelopment環境で動作していた(と思われる?)こととなりoptionsメソッドに悪影響を及ぼしていた可能性があります。
|
366
|
+
|
367
|
+
なんとか、テスト用のDBの作成migrateを実行し、再度テストを実行した結果、無事通りました。
|
368
|
+
|
369
|
+
|
370
|
+
|
371
|
+
neko_daisukeさんよりたくさんのヒントを頂き解決することができました。
|
372
|
+
|
373
|
+
本当にありがとうございます。
|
5
CSRF対策について行ったことを記述
test
CHANGED
File without changes
|
test
CHANGED
@@ -285,3 +285,31 @@
|
|
285
285
|
```
|
286
286
|
|
287
287
|
結果、ログの内容は変わリませんでした。
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
-----------CSRF対策を疑ってみた(空振りに終わる)-----------------
|
292
|
+
|
293
|
+
```testrb
|
294
|
+
|
295
|
+
config.action_controller.allow_forgery_protection = false
|
296
|
+
|
297
|
+
```
|
298
|
+
|
299
|
+
rails生成時にtest.rbには上記が記述されており、デフォルトではテスト環境でCSRF対策の検証は行わないことになっている。
|
300
|
+
|
301
|
+
以前、createアクションのテスト実行時にCSRF関係のエラーが発生した経緯が有りました。
|
302
|
+
|
303
|
+
今回においても、getリクエストのテスト(indexやedit)については通るが、update/deleteなどget以外のリクエストによりエラーが発生しているのではと仮説を立てました。
|
304
|
+
|
305
|
+
このことから、下記の通りにusers_controller.rbを修正してみました。
|
306
|
+
|
307
|
+
```userscontrollerrb
|
308
|
+
|
309
|
+
protect_from_forgery with: :exception, only: %i[create update destroy]
|
310
|
+
|
311
|
+
```
|
312
|
+
|
313
|
+
結果、何も変わりませんでした。
|
314
|
+
|
315
|
+
これも何かの参考になればと追記いたしました。
|
4
rspecのデフォルトのDatabaseCleanerに戻した結果
test
CHANGED
File without changes
|
test
CHANGED
@@ -158,6 +158,10 @@
|
|
158
158
|
|
159
159
|
|
160
160
|
|
161
|
+
下記は時系列に対応した状況を示したもの
|
162
|
+
|
163
|
+
|
164
|
+
|
161
165
|
----------------試したこと------------------------
|
162
166
|
|
163
167
|
作成したmock_sign_inメソッドについて
|
@@ -269,3 +273,15 @@
|
|
269
273
|
error logについて
|
270
274
|
|
271
275
|
![error log](ae0a14399edb48e4cf16e096f8cb726d.png)
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
-----------RspecのデフォルトのDatabaseCleanerに戻した結果-----------------
|
280
|
+
|
281
|
+
```railshelper
|
282
|
+
|
283
|
+
config.use_transactional_fixtures = true
|
284
|
+
|
285
|
+
```
|
286
|
+
|
287
|
+
結果、ログの内容は変わリませんでした。
|
3
経過状況がわかるように修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -158,6 +158,8 @@
|
|
158
158
|
|
159
159
|
|
160
160
|
|
161
|
+
----------------試したこと------------------------
|
162
|
+
|
161
163
|
作成したmock_sign_inメソッドについて
|
162
164
|
|
163
165
|
```testhelper
|
@@ -182,6 +184,10 @@
|
|
182
184
|
|
183
185
|
|
184
186
|
|
187
|
+
|
188
|
+
|
189
|
+
-----------neko_daisukiさんより頂いた回答について-----------------
|
190
|
+
|
185
191
|
indexアクションのテストについて
|
186
192
|
|
187
193
|
```usresrequestsspec
|
2
回答のあった件について、追加情報
test
CHANGED
File without changes
|
test
CHANGED
@@ -179,3 +179,87 @@
|
|
179
179
|
様々なサイト等を参考に落とし込んでみたのですが、、、
|
180
180
|
|
181
181
|
多分、間違えてます。
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
indexアクションのテストについて
|
186
|
+
|
187
|
+
```usresrequestsspec
|
188
|
+
|
189
|
+
describe 'GET #index' do
|
190
|
+
|
191
|
+
subject { response }
|
192
|
+
|
193
|
+
# ユーザーのログインの有無を確認
|
194
|
+
|
195
|
+
describe 'before_action :logged_in_user' do
|
196
|
+
|
197
|
+
let!(:user) { FactoryBot.create(:user) }
|
198
|
+
|
199
|
+
# ユーザーがログインしている場合
|
200
|
+
|
201
|
+
context 'The user is logged in' do
|
202
|
+
|
203
|
+
before do
|
204
|
+
|
205
|
+
sign_in(user)
|
206
|
+
|
207
|
+
get users_path
|
208
|
+
|
209
|
+
end
|
210
|
+
|
211
|
+
it 'responds successfully' do
|
212
|
+
|
213
|
+
is_expected.to be_successful
|
214
|
+
|
215
|
+
end
|
216
|
+
|
217
|
+
|
218
|
+
|
219
|
+
it 'returns a 200 response' do
|
220
|
+
|
221
|
+
is_expected.to have_http_status(200)
|
222
|
+
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|
226
|
+
|
227
|
+
# ユーザーがログインしていない場合
|
228
|
+
|
229
|
+
context 'The user is not logged in' do
|
230
|
+
|
231
|
+
before do
|
232
|
+
|
233
|
+
get users_path
|
234
|
+
|
235
|
+
end
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
it 'redirect to login url' do
|
240
|
+
|
241
|
+
is_expected.to redirect_to login_url
|
242
|
+
|
243
|
+
end
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
it 'returns a 302 response' do
|
248
|
+
|
249
|
+
is_expected.to have_http_status(302)
|
250
|
+
|
251
|
+
end
|
252
|
+
|
253
|
+
end
|
254
|
+
|
255
|
+
end
|
256
|
+
|
257
|
+
end
|
258
|
+
|
259
|
+
```
|
260
|
+
|
261
|
+
![indexアクションのログ](838573bcb7aeed032e4dd33241edf008.png)
|
262
|
+
|
263
|
+
error logについて
|
264
|
+
|
265
|
+
![error log](ae0a14399edb48e4cf16e096f8cb726d.png)
|
1
mock_sign_inメソッドを追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -155,3 +155,27 @@
|
|
155
155
|
|
156
156
|
|
157
157
|
どんな些細なことでも構いませんので、どなたか教えていただきたいです。
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
作成したmock_sign_inメソッドについて
|
162
|
+
|
163
|
+
```testhelper
|
164
|
+
|
165
|
+
def mock_sign_in(user)
|
166
|
+
|
167
|
+
mock_ActionDispatch = instance_double(ActionDispatch::Request)
|
168
|
+
|
169
|
+
allow(mock_ActionDispatch).to receive(:session)
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
allow(mock_ActionDispatch).to receive(:session).and_return(user_id: user.id)
|
174
|
+
|
175
|
+
end
|
176
|
+
|
177
|
+
```
|
178
|
+
|
179
|
+
様々なサイト等を参考に落とし込んでみたのですが、、、
|
180
|
+
|
181
|
+
多分、間違えてます。
|