現在ruby on railsのポートフォリオにdockerを導入しています。
chromeのimageを指定して、systemspec自体は動くようになったのですが、数カ所でエラーが起きています。
error
1 Comments コメント削除 投稿ユーザーの場合 コメントの削除ができる 2 Failure/Error: page.accept_confirm '削除しますか?' 3 4 Capybara::NotSupportedByDriverError: 5 Capybara::Driver::Base#accept_modal
このほかにもエラーが何箇所か起きているのですが、Javascriptを使っている部分で起きています。
調べたところ、テストに js:true
のオプションをつける必要があるとのことでしたのでjsを使用しているテストコードにit 'コメントの削除ができる', js:true do
としてテストを実行したのですが、ブラウザーが見つからないというエラーが発生してしまいます。
1.1) Failure/Error: driven_by :remote_chrome Webdrivers::BrowserNotFound: Failed to find Chrome binary.
解決をしたいのですが、どのようにコードを改善すれば良いかわからないため、わかる方いましたらご教授いただきたいです。
以下、該当ファイルのコードです。
Dockerfile
FROM ruby:2.6.5 RUN apt-get update -qq && apt-get install -y build-essential imagemagick nodejs RUN mkdir /search_laundry WORKDIR /search_laundry COPY Gemfile /search_laundry/Gemfile COPY Gemfile.lock /search_laundry/Gemfile.lock RUN gem install bundler && bundle install COPY . /search_laundry
docker-compose.yml
version: '3' services: db: image: mysql:5.7 command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci environment: MYSQL_USER: root MYSQL_PASSWORD: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: search_laundry_development ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" environment: - AWS_ACCESS_KEY_ID - AWS_SECRET_ACCESS_KEY - GOOGLE_MAP_API volumes: - .:/search_laundry ports: - "3000:3000" depends_on: - db - chrome tty: true stdin_open: true chrome: image: selenium/standalone-chrome:latest ports: - 4444:4444 volumes: mysql-data: driver: local
rails_helper
Capybara.register_driver :remote_chrome do |app| url = "http://chrome:4444/wd/hub" caps = ::Selenium::WebDriver::Remote::Capabilities.chrome( "goog:chromeOptions" => { "args" => [ "no-sandbox", "headless", "disable-gpu", "window-size=1680,1050" ] } ) Capybara::Selenium::Driver.new(app, browser: :remote, url: url, desired_capabilities: caps) end RSpec.configure do |config| config.before(:each, type: :system, js: true) do driven_by :remote_chrome Capybara.server_host = IPSocket.getaddress(Socket.gethostname) Capybara.server_port = 3001 Capybara.app_host = "http://#{Capybara.server_host}:#{Capybara.server_port}" end config.before(:each, type: :system) do driven_by :rack_test end end
開発環境は以下のとおりです。
- rails 6.0.3.3
- docker 19.03.13
- rspec 4.0.1
よろしくお願いいたします。
あなたの回答
tips
プレビュー