質問編集履歴
3
情報の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -551,3 +551,43 @@
|
|
551
551
|
|
552
552
|
|
553
553
|
binding.pryを用いて色々やったのですが、なんか効果的なデバッグ方法があればご教授いただけると幸いです。
|
554
|
+
|
555
|
+
|
556
|
+
|
557
|
+
|
558
|
+
|
559
|
+
**spec/system/drinks_spec.rb**
|
560
|
+
|
561
|
+
|
562
|
+
|
563
|
+
```ruby
|
564
|
+
|
565
|
+
let!(:user) { FactoryBot.create(:user) }
|
566
|
+
|
567
|
+
let(:drink) { FactoryBot.create(:drink) }
|
568
|
+
|
569
|
+
let!(:other_user) { FactoryBot.create(:user) }
|
570
|
+
|
571
|
+
let(:other_drink) { FactoryBot.create(:drink) }
|
572
|
+
|
573
|
+
|
574
|
+
|
575
|
+
```
|
576
|
+
|
577
|
+
|
578
|
+
|
579
|
+
で、
|
580
|
+
|
581
|
+
|
582
|
+
|
583
|
+
```
|
584
|
+
|
585
|
+
let(:other_drink) { FactoryBot.create(:drink) }
|
586
|
+
|
587
|
+
```
|
588
|
+
|
589
|
+
|
590
|
+
|
591
|
+
があることで、テストがパスできないと思いコメントアウトしても、同じエラーが起こってしまいます。
|
592
|
+
|
593
|
+
削除する。のリンクをクリックするテストはパスできてるはずなので、なぜこのようなエラーが起こってしまうのか分かりません。
|
2
情報の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,6 +8,10 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
+
**docker上で開発していて、クロムをインストールしました**
|
12
|
+
|
13
|
+
|
14
|
+
|
11
15
|
### 発生している問題・エラーメッセージ
|
12
16
|
|
13
17
|
|
@@ -266,6 +270,180 @@
|
|
266
270
|
|
267
271
|
|
268
272
|
|
273
|
+
**docker-compose.yml**
|
274
|
+
|
275
|
+
|
276
|
+
|
277
|
+
```yml
|
278
|
+
|
279
|
+
web:
|
280
|
+
|
281
|
+
enviroment:
|
282
|
+
|
283
|
+
SELENIUM_DRIVER_URL: http://selenium_chrome:4444/wd/hub"
|
284
|
+
|
285
|
+
selenium_chrome:
|
286
|
+
|
287
|
+
image: selenium/standalone-chrome-debug
|
288
|
+
|
289
|
+
logging:
|
290
|
+
|
291
|
+
driver: none
|
292
|
+
|
293
|
+
```
|
294
|
+
|
295
|
+
|
296
|
+
|
297
|
+
|
298
|
+
|
299
|
+
**Dockerfile**
|
300
|
+
|
301
|
+
|
302
|
+
|
303
|
+
```
|
304
|
+
|
305
|
+
# chromeの追加
|
306
|
+
|
307
|
+
RUN apt-get update && apt-get install -y unzip && \
|
308
|
+
|
309
|
+
CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
|
310
|
+
|
311
|
+
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \
|
312
|
+
|
313
|
+
unzip ~/chromedriver_linux64.zip -d ~/ && \
|
314
|
+
|
315
|
+
rm ~/chromedriver_linux64.zip && \
|
316
|
+
|
317
|
+
chown root:root ~/chromedriver && \
|
318
|
+
|
319
|
+
chmod 755 ~/chromedriver && \
|
320
|
+
|
321
|
+
mv ~/chromedriver /usr/bin/chromedriver && \
|
322
|
+
|
323
|
+
sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \
|
324
|
+
|
325
|
+
sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
|
326
|
+
|
327
|
+
apt-get update && apt-get install -y google-chrome-stable
|
328
|
+
|
329
|
+
```
|
330
|
+
|
331
|
+
|
332
|
+
|
333
|
+
**spec/support/selenium_chrome.rb**
|
334
|
+
|
335
|
+
|
336
|
+
|
337
|
+
```
|
338
|
+
|
339
|
+
require 'capybara/rspec'
|
340
|
+
|
341
|
+
require 'selenium-webdriver'
|
342
|
+
|
343
|
+
|
344
|
+
|
345
|
+
Capybara.register_driver :selenium_chrome_headless do |app|
|
346
|
+
|
347
|
+
options = ::Selenium::WebDriver::Chrome::Options.new
|
348
|
+
|
349
|
+
|
350
|
+
|
351
|
+
|
352
|
+
|
353
|
+
options.add_argument('--headless')
|
354
|
+
|
355
|
+
options.add_argument('--no-sandbox')
|
356
|
+
|
357
|
+
options.add_argument('--disable-dev-shm-usage')
|
358
|
+
|
359
|
+
options.add_argument('--window-size=1400,1400')
|
360
|
+
|
361
|
+
|
362
|
+
|
363
|
+
|
364
|
+
|
365
|
+
driver = Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
|
366
|
+
|
367
|
+
end
|
368
|
+
|
369
|
+
|
370
|
+
|
371
|
+
Capybara.javascript_driver = :selenium_chrome_headless
|
372
|
+
|
373
|
+
```
|
374
|
+
|
375
|
+
|
376
|
+
|
377
|
+
**spec/support/capybara.rb**
|
378
|
+
|
379
|
+
|
380
|
+
|
381
|
+
```
|
382
|
+
|
383
|
+
Capybara.register_driver :chrome_headless do |app|
|
384
|
+
|
385
|
+
options = ::Selenium::WebDriver::Chrome::Options.new
|
386
|
+
|
387
|
+
|
388
|
+
|
389
|
+
options.add_argument('--headless')
|
390
|
+
|
391
|
+
options.add_argument('--no-sandbox')
|
392
|
+
|
393
|
+
options.add_argument('--disable-dev-shm-usage')
|
394
|
+
|
395
|
+
options.add_argument('--window-size=1400,1400')
|
396
|
+
|
397
|
+
|
398
|
+
|
399
|
+
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
|
400
|
+
|
401
|
+
end
|
402
|
+
|
403
|
+
|
404
|
+
|
405
|
+
Capybara.javascript_driver = :chrome_headless
|
406
|
+
|
407
|
+
|
408
|
+
|
409
|
+
RSpec.configure do |config|
|
410
|
+
|
411
|
+
config.before(:each, type: :system) do
|
412
|
+
|
413
|
+
driven_by :rack_test
|
414
|
+
|
415
|
+
end
|
416
|
+
|
417
|
+
|
418
|
+
|
419
|
+
config.before(:each, type: :system, js: true) do
|
420
|
+
|
421
|
+
if ENV["SELENIUM_DRIVER_URL"].present?
|
422
|
+
|
423
|
+
driven_by :selenium, using: :chrome, options: {
|
424
|
+
|
425
|
+
browser: :remote,
|
426
|
+
|
427
|
+
url: ENV.fetch("SELENIUM_DRIVER_URL"),
|
428
|
+
|
429
|
+
desired_capabilities: :chrome
|
430
|
+
|
431
|
+
}
|
432
|
+
|
433
|
+
else
|
434
|
+
|
435
|
+
driven_by :selenium_chrome_headless
|
436
|
+
|
437
|
+
end
|
438
|
+
|
439
|
+
end
|
440
|
+
|
441
|
+
end
|
442
|
+
|
443
|
+
```
|
444
|
+
|
445
|
+
|
446
|
+
|
269
447
|
|
270
448
|
|
271
449
|
### 試したこと
|
1
情報の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -292,4 +292,84 @@
|
|
292
292
|
|
293
293
|
|
294
294
|
|
295
|
+
```
|
296
|
+
|
297
|
+
context '削除できるとき' do
|
298
|
+
|
299
|
+
it "投稿した本人ならその投稿を削除できる" do
|
300
|
+
|
301
|
+
|
302
|
+
|
303
|
+
visit login_path
|
304
|
+
|
305
|
+
fill_in 'email', with: drink.user.email
|
306
|
+
|
307
|
+
fill_in 'password', with: drink.user.password
|
308
|
+
|
309
|
+
find('input[name="commit"]').click
|
310
|
+
|
311
|
+
expect(current_path).to eq(user_path(drink.user))
|
312
|
+
|
313
|
+
|
314
|
+
|
315
|
+
# 投稿詳細ページに移動
|
316
|
+
|
317
|
+
visit drink_path(drink)
|
318
|
+
|
319
|
+
# 削除のリンクがある
|
320
|
+
|
321
|
+
expect(page).to have_link '削除する', href: drink_path(drink)
|
322
|
+
|
323
|
+
# 削除したら、Drinkモデルのカウントが1減る
|
324
|
+
|
325
|
+
expect{
|
326
|
+
|
327
|
+
find_link('削除する', href: drink_path(drink)).click
|
328
|
+
|
329
|
+
}.to change { Drink.count }.by(-1)
|
330
|
+
|
331
|
+
# トップページに遷移される
|
332
|
+
|
333
|
+
visit root_path
|
334
|
+
|
335
|
+
# 削除した投稿はない
|
336
|
+
|
337
|
+
expect(page).to have_no_content(drink.image)
|
338
|
+
|
339
|
+
expect(page).to have_content("TOKYOロースト")
|
340
|
+
|
341
|
+
expect(page).to have_content("#{drink.price}")
|
342
|
+
|
343
|
+
expect(page).to have_content("#{drink.explain}")
|
344
|
+
|
345
|
+
end
|
346
|
+
|
347
|
+
end
|
348
|
+
|
349
|
+
```
|
350
|
+
|
351
|
+
|
352
|
+
|
353
|
+
このようなテストだと通りました。
|
354
|
+
|
355
|
+
画像は削除された?のですが、 expect(page).to have_link '削除する', href: drink_path(drink)
|
356
|
+
|
357
|
+
が機能してない?
|
358
|
+
|
359
|
+
|
360
|
+
|
361
|
+
でも expect{
|
362
|
+
|
363
|
+
find_link('削除する', href: drink_path(drink)).click
|
364
|
+
|
365
|
+
}.to change { Drink.count }.by(-1)
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
がパスできてる?
|
370
|
+
|
371
|
+
|
372
|
+
|
373
|
+
|
374
|
+
|
295
375
|
binding.pryを用いて色々やったのですが、なんか効果的なデバッグ方法があればご教授いただけると幸いです。
|