0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

(WSL2の)debianでRails6.1のsystem testを動かす

Posted at

実行するコマンド

# headless chrome のインストール
curl https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb # エラーが出るけどそのまま進む
sudo apt install -fy

テストコードの変更

test/application_system_test_case.rb
require "test_helper"

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  # driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
  driven_by :selenium, using: :headless_chrome
end

解説

前提: system testの仕組み

  • Railsアプリとブラウザを実際に動作させて、テストプログラムからブラウザを操作してテストを行う
  • なので、ブラウザが必要である
  • ブラウザをテストで操作するためのプログラムも必要である、これをドライバと呼ぶ
  • どのブラウザ(ドライバ)を使うかは指定する(する必要がある)

ドライバは自動で用意される

ぐぐると様々な情報が出てきますが、Rails6.1においては、特別に何かの設定をする必要はありません。

Rails6.1のGemfileには最初からwebdriversというgemが入っていて、このgemがsystem testの実行時に(なければ)自動的に必要なドライバをインストールしてくれます。

WSL2環境においては、ブラウザはheadless chromeが楽

webdrivers gemのREADMEに書いてあるとおりです。windows上のchromeを利用するためには特殊な設定が必要になるので、特別な理由がなければheadless chromeが良いでしょう。

ちなみにheadというのは画面のことで、画面無しで(コマンドラインで)動くからheadlessと呼びます。

chromeはaptから直接はインストールできない

apt search chrome とかで探すとわかりますが、aptのパッケージにはなっていないようです。

googleのサイトからダウンロードする方法が3年前の先人による記事で見つかったのでその方法を採用して、うまく行きましたが、ブラウザからchromeのダウンロード用サイトを見てもcurlなどでダウンロードする場合のURLは見つけられませんでした。なので、いつまでこの方法でできるかはわかりません。

dpkg はaptのより基本的な部分のインストール処理を行うコマンドですが、実行しても依存関係を解決できませんでした(理由は未確認)。なので続く sudo apt install -fy で依存関係の解決を後出しで行って、chromeを動くようにしています。

chromeはheadlessかどうかで使うドライバ(の設定)が異なる

デフォルトでもsystem testはchromeを使う設定になっていますが、これは画面があるchromeを使う設定なので、画面があるchromeを起動できない環境(WSL2はこれに該当します)ではテスト実行が失敗します。

headless chromeを使うには、冒頭に記載したようにテストコードの設定変更を行えば良いです。このこと自体はRailsガイドに記載があります

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?