環境
ruby 3.2.1
Rails 6.1.7.3
Docker version 23.0.5, build bc4487a
Gemfile
Gemfile
group :development, :test do
gem 'rspec-rails'
end
group :test do
gem 'capybara', '>= 3.26'
gem 'selenium-webdriver', '4.8.3'
gem 'webdrivers'
end
spec/rails_helper.rb
spec/rails_helper.rb
RSpec.configure do |config|
config.before(:each, type: :system) do
driven_by :rack_test
end
config.before(:each, type: :system, js: true) do
driven_by :selenium_chrome_headless
Selenium::WebDriver.logger.ignore :capabilities
end
end
Capybara.register_driver :selenium_chrome_headless do |app|
options = ::Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--window-size=1400,1400')
driver = Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
Capybara.javascript_driver = :selenium_chrome_headless
Dockerfile
Dockerfile
#chromeドライバーをインストール
RUN apt-get update && apt-get install -y 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
以上の設定を追加することで、docker-composeでrspecを実行した時にAjaxのテストが通るようになります。
参考
Rails + Selenium + DockerでSystemSpecの環境構築
【rails】Docker環境でSystemSpecの導入の仕方。