概要
rspecでSystem specを流そうと思いましたが、いろいろハマるところが多かったので、自分がハマったところを記載しておきます。
環境
- 共通
- Ruby 2.5.8
- Rails 5.2.4
- rspec 3.10.0
- selenium-webdriver 3.142.7
- ローカル環境
- Ubuntu 16.04(WSL2)
- Chromium 87.0.4280.66
- ChromeDriver 87.0.4280.66
- CI環境
- Github Actions
Chrome環境は特にインストールしなくても大丈夫でした
- Github Actions
ローカル環境でChromeが動かない
最初はWSL1上でSystem specを動かそうとしていましたが、うまく動いてくれませんでした。
いろいろな可能性を試したところWSLをVersion2にすることで動作させることが出来ました。
最終的に動作した内容が下記になります。
ChromeとChromeDriverのバージョンを合わせないといけないという記述がありましたが、下記をインストールすればChromiumがブラウザとして使われてバージョンも同じになるので簡単そうです。
sudo apt-get install chromium-chromedriver
Capybara.default_driver = :selenium_chrome_headless
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-gpu')
options.add_argument('--window-size=1280,1024')
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
config.before(:each, type: :system) do
driven_by :selenium_chrome_headless
end
Github Actionsで日本語環境を整える
ローカル環境でSystem specが動くように整えた状態でGithub Actionsで動かしてみたところ、rspec自体は何もしなくて動きました
Chrome環境を整える必要があると思っていたのですが、特に何もしなくても動きました。
ただ、System specは失敗になっていて失敗時の画像を見るとChromeの言語が英語になっているようでした。
require 'rails_helper'
RSpec.feature 'Users', type: :system do
let!(:user) { create :user }
scenario "ログインできること" do
visit login_path
fill_in "email", with: user.email
fill_in "password", with: user.password
click_button "ログイン"
expect(page).to have_content("ホーム")
end
end
ChromeDriverの設定にlang
をオプションとして追加すると解決するというページもちらほらあったのですが、うまくいきませんでした。
options.add_argument('--lang=ja-JP')
結果的にはなんて言うことはなく、rspecを動かすときにLANG
環境変数を設定してあげるだけでした
- name: Run rspec
run: bundle exec rspec
env:
LANG: ja-JP
RAILS_ENV: test
最後に日本語フォントを入れてあげないと日本語が表示されないので、事前にインストールするようにしました。
- name: Install fonts
run: sudo apt-get install fonts-ipafont-gothic fonts-ipafont-mincho