前提・実現したいこと
railsアプリのdockerコンテナ内で、rspecのsystemスペックでエラーがでます。
恥ずかしながらwebdriverについての知識が足らず、調べてみても何がなんだかわからず解決できなかったので、
ご教授いただけると幸いです。
発生している問題・エラーメッセージ
現在dockerでコンテナを立てて、コンテナ内でrspecをテストした所、systemスペック以下のエラーがでてきました。
Failure/Error: visit login_path Selenium::WebDriver::Error::UnknownError: unknown error: net::ERR_CONNECTION_REFUSED (Session info: chrome=xx.x.xxxx.xx)
該当のソースコード
capybara.rb
Capybara.register_driver :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') Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) end Capybara.server_host = 'web' Capybara.javascript_driver = :chrome_headless RSpec.configure do |config| config.before(:each, type: :system) do driven_by :rack_test end config.before(:each, type: :system, js: true) do if ENV["SELENIUM_DRIVER_URL"].present? driven_by :selenium, using: :chrome, options: { browser: :remote, url: ENV.fetch("SELENIUM_DRIVER_URL"), desired_capabilities: :chrome } else driven_by :selenium_chrome_headless end end end
Gemfile
source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.5.7' gem 'rails', '5.2.3' gem 'carrierwave', '1.2.2' gem "mini_magick", '>= 4.9.4' gem 'active_storage_validations', '0.8.2' gem 'dotenv-rails' gem 'fog-aws' gem 'pg', '>= 0.18', '< 2.0' gem 'puma', '~> 3.11' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' gem 'bootstrap', '~> 4.1.1' gem 'jquery-rails' gem 'coffee-rails', '~> 4.2' gem 'turbolinks', '~> 5' gem 'jbuilder', '~> 2.5' gem 'bootsnap', '>= 1.1.0', require: false gem 'devise' gem 'faker' gem 'kaminari' gem 'i18n_generators' gem 'active_hash' group :production do gem 'fog', '1.42' end group :development, :test do gem 'rspec-rails', '~> 4.0.0.beta2' gem 'rails-controller-testing' gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'rubocop-airbnb' gem "factory_bot_rails", "~> 4.10.0" end group :development do gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' gem 'spring-commands-rspec' end group :test do gem 'capybara', '>= 2.15' gem 'webdrivers' end gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
Dockerfile
FROM ruby:2.5.7 RUN apt-get update -qq && apt-get install -y nodejs postgresql-client yarn WORKDIR /fodeli_online COPY Gemfile /fodeli_online/Gemfile COPY Gemfile.lock /fodeli_online/Gemfile.lock RUN bundle install CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yml
version: '3' # docker-composeの書式のバージョンを指定します。(原則、最新を指定する) services: db: image: postgres volumes: - 'db-data:/var/lib/postgresql/data' environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - 5433:5432 web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/fodeli_online/ ports: - 3000:3000 tty: true stdin_open: true depends_on: - db links: - db environment: - "SELENIUM_DRIVER_URL=http://selenium_chrome:4444/wd/hub" selenium_chrome: image: selenium/standalone-chrome-debug ports: - 4444:4444 volumes: db-data:
rails_helper.rb
require 'spec_helper' require 'capybara/rspec' require 'carrierwave/test/matchers' ENV['RAILS_ENV'] ||= 'test' require File.expand_path('../config/environment', __dir__) abort("The Rails environment is running in production mode!") if Rails.env.production? require 'rspec/rails' Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } begin ActiveRecord::Migration.maintain_test_schema! rescue ActiveRecord::PendingMigrationError => e puts e.to_s.strip exit 1 end RSpec.configure do |config| config.fixture_path = "#{::Rails.root}/spec/fixtures" config.use_transactional_fixtures = true config.include FactoryBot::Syntax::Methods config.include Devise::Test::IntegrationHelpers, type: :system config.infer_spec_type_from_file_location! config.filter_rails_from_backtrace! end
試したこと
##1
https://stackoverflow.com/questions/63945674/capybara-rails-selenium-chromedriver-errconnection-refused
こちらのURLを参考にして
capybara.rb内に
Capybara.always_include_port = true
を追記しましたがエラー内容は変わりませんでした。
##2
ポートが解放されていないのが原因かと思いportsで指定しましたがエラー内容は変わりませんでした
selenium_chrome: image: selenium/standalone-chrome-debug ports: - 4444:4444
補足情報(FW/ツールのバージョンなど)
Rails 5.2.3
ruby 2.5.7
Docker version 20.10.11
あなたの回答
tips
プレビュー