Dockerで実行するfeature test(画面テスト)にSystem Spec
を使ってみた。
javascriptのテストをやりたくて。
既にRspecは導入済みの前提。
System Spec
については下記が詳しい。
- rspec-rails 3.7の新機能!System Specを使ってみた - Qiita
Dockerfile
chromedriver-helperをgemでインストールしてもエラーが出て使えないよう。
Dockerfileで、web
コンテナにchromedriver
とheadlessのChromeをインストールする。
FROM ruby:2.5.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev unzip && \
CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \
unzip ~/chromedriver_linux64.zip -d ~/ && \
rm ~/chromedriver_linux64.zip && \
chown root:root ~/chromedriver && \
chmod 755 ~/chromedriver && \
mv ~/chromedriver /usr/bin/chromedriver && \
sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \
sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
apt-get update && apt-get install -y google-chrome-stable
...
rails_helper
Capybara.register_driver
、Capybara.javascript_driver
の記述は不要。
# rails_helper.rb
...
require 'capybara'
...
RSpec.configure do |config|
...
config.include Devise::Test::IntegrationHelpers, type: :system
config.include Warden::Test::Helpers
config.after :each do
Warden.test_reset!
end
config.before(:each) do |example|
if example.metadata[:type] == :system
driven_by :selenium, using: :headless_chrome, screen_size: [1280, 800], options: { args: ["headless", "disable-gpu", "no-sandbox", { "lang" => 'ja-JP' }] }
end
end
end
login_asメソッドでエラー
login_as(@user, scope: :user)
で uncaught throw :warden
エラーが出る。
ScreenShotをよく見ると、recordがactiveじゃないよう?
作成したUserモデルがconfirmable
の場合、confirmed_at
に日付を入れてactiveにする必要がある。
参考
- 「Selenium::WebDriver::Error::WebDriverError: unable to connect to chromedriver 127.0.0.1:9515」または「Selenium::WebDriver::Error::UnknownError: unknown error: cannot find Chrome binary」のエラーに対応する - Qiita
- Headless ChromeをDocker上で動かして、E2Eのテスト - Qiita
- Docker上でSystem Specが失敗する - 料理とソフトウェアは似ている