🐈
Apple silicon 搭載 Mac で SystemSpec を動かす
Apple silicon 搭載 Mac の Docker 上で SystemSpec を動かそうとしたところ、いくつかのハマりどころがありました。そこで、執筆時点での最新の設定方法を共有します。
この記事を読むとわかること
- 執筆時点での最新設定方法
この記事を読んでもわからないこと
- Rails の SystemSpec の書き方
- エラーとその原因
環境
-
MacBook Air ( M1 )
-
macOS 13.5
-
Docker Desktop 4.25
-
base image
- ruby:3.2
- seleniarm/standalone-chromium:116.0
-
Gem
- rails (6.1)
- rspec-rails (5.1)
- capybara (3.392)
- selenium-webdriver (4.10)
設定方法
実際に SystemSpec を動かすための設定方法を紹介します。まず、Railsプロジェクトの spec/rails_helper.rb
に以下のような設定を追加します。
spec/rails_helper.rb
config.before(:each, type: :system) do |example|
if example.metadata[:use_js]
options = {}
if ENV.key?('SELENIUM_DRIVER_URL')
Capybara.server_host = ENV['CAPYBARA_SERVER_HOST']
Capybara.app_host = ENV['CAPYBARA_APP_HOST']
Capybara.register_driver :remote_chrome do |app|
url = ENV['SELENIUM_DRIVER_URL']
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('no-sandbox')
options.add_argument('headless')
options.add_argument('disable-gpu')
options.add_argument('window-size=1280,800')
Capybara::Selenium::Driver.new(app, browser: :remote, url: url, capabilities: options)
end
driven_by :remote_chrome
else
driven_by :selenium, using: :headless_chrome, screen_size: [1280, 800] do |opt|
opt.add_argument('--headless --disable-gpu --no-sandbox --lang=ja-JP')
end
end
else
driven_by :rack_test
end
end
end
上記の設定では、Selenium を使用したブラウザテストを行う際のドライバの設定を行っています。
続いて、Docker 側の設定も行います。具体的には、 docker-compose.yml
に以下のような設定を追加します。
docker-compose.yml
version: '3.8'
services:
web:
environment:
SELENIUM_DRIVER_URL: http://selenium_chrome:4444/wd/hub
CAPYBARA_SERVER_HOST: web
CAPYBARA_APP_HOST: http://web
selenium_chrome:
image: seleniarm/standalone-chromium:116.0
以上で、SystemSpec を実行するための準備が整いました。
参考記事
Discussion