From 2f027f4f0d0b77044287f18bab5bf8041e0d5d9d Mon Sep 17 00:00:00 2001 From: Daniel O'Connor Date: Wed, 17 Jan 2024 13:38:19 +0000 Subject: [PATCH] Make capybara work in the devcontainer --- .devcontainer/Dockerfile | 4 ++++ .devcontainer/devcontainer.json | 2 +- spec/rails_helper.rb | 23 ++++++++++++++++++++--- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 7f8f6eef9..45f139546 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -15,6 +15,10 @@ ENV RAILS_DEVELOPMENT_HOSTS=".githubpreview.dev,.preview.app.github.dev,.app.git RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ && apt-get -y install --no-install-recommends bash-completion +# Chrome for testing packages. https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#chrome-doesnt-launch-on-linux +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends ca-certificates fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils + # [Optional] Uncomment this line to install additional gems. # RUN gem install diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 940d241e7..50688ae72 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,7 +14,7 @@ // Use 'forwardPorts' to make a list of ports inside the container available locally. // This can be used to network with other containers or the host. -"forwardPorts": [3000, 5432, 9200], +"forwardPorts": [3000, 5432, 9200, 8081], // Use 'postCreateCommand' to run commands after the container is created. // these don't actually work as postCreateCommands, you need to run them manually diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 80f804427..2b9b39de8 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -21,10 +21,27 @@ require 'capybara/rspec' require 'selenium/webdriver' require 'capybara-screenshot/rspec' -require 'webdrivers' +# TODO: We may want to trial options.add_argument('--disable-dev-shm-usage') ### optional -Capybara.default_driver = :selenium_chrome_headless -Capybara.javascript_driver = :selenium_chrome_headless +# Required for running in the dev container +Capybara.register_driver :selenium_chrome_customised_headless do |app| + options = Selenium::WebDriver::Options.chrome + options.add_argument("--headless") + options.add_argument("--no-sandbox") + + # driver = Selenium::WebDriver.for :chrome, options: options + + Capybara::Selenium::Driver.new(app, browser: :chrome, options:) +end + +# Ability to pass in flags to +if ENV["CAPYBARA_DRIVER"] + Capybara.default_driver = ENV["CAPYBARA_DRIVER"].to_sym + Capybara.javascript_driver = ENV["CAPYBARA_DRIVER"].to_sym +else + Capybara.default_driver = :selenium_chrome_customised_headless + Capybara.javascript_driver = :selenium_chrome_customised_headless +end Capybara::Screenshot.register_filename_prefix_formatter(:rspec) do |example| "screenshot_#{example.description.tr(' ', '-').gsub(%r{^.*/spec/}, '')}"