RailsのシステムテストをWSLで実行しようと、軽い気持ちで初めてみました。 意外と難しいです。
ポイント次の2点です
いまのところ上手く行っていません。
Railsのシステムテストの準備
ジェネレートコマンドでひな形を作ります。
bin/rails generate system_test docs
生成したファイル内のコメントアウトを外します。次のコマンドで実行します。
bin/rails test test/system/docs_test.rb
色々足りない場合は追加します。
Gemfileに次の2行を足してbundle
します。
gem 'capybara' gem 'selenium-webdriver' gem 'webdrivers', '~> 5.0'
test_helper.rb
がない場合は適当にでっち上げます。
ENV["RAILS_ENV"] = "test" require File.expand_path('../../config/environment', __FILE__) require 'rails/test_help' class ActiveSupport::TestCase # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order. # # Note: You'll currently still have to declare fixtures explicitly in integration tests # -- they do not yet inherit this setting fixtures :all # Add more helper methods to be used by all tests here... end
ホストOSのChromeを動かす
https://chromedriver.storage.googleapis.com/index.html?path=103.0.5060.24/ からchromedriverをダウンロードしてきます。
次のようにtest_helper.rb
中でホストOSのchromedriverを指定すると起動はします。
require 'selenium-webdriver' Selenium::WebDriver::Chrome::Service.driver_path = '/mnt/c/Users/led_l/Downloads/chromedriver_win32/chromedriver.exe'
つぎのように127.0.0.1:9515
への接続に失敗します。
/home/ledsun/.rbenv/versions/2.7.4/lib/ruby/2.7.0/net/http.rb:960:in `initialize': Failed to open TCP connection to 127.0.0.1:9515 (Connection refused - connect(2) for "127.0.0.1" port 9515) (Errno::ECONNREFUSED)
WSL2 上で起動した Selenium Webdriver や Puppeteer から Windows 側の Chrome ウィンドウを操作したかったが無理 - Neo's World
WSL 側から Windows 側を覗くには、localhost ではダメで、/etc/resolv.conf に記載の 172.xx.xx.xx な IP を使うか、PowerShell で ipconfig で確認した 192.168.xx.xx な IP を指定する必要がある
ここで、IPアドレスを設定する方法がわからず、詰まっています。
WSLのChromeを動かす
WSLにChromeをインストールして動かす方法もあるようです。 WSLにGUIを設定していないので、ヘッドレスモードで動かすオプションを設定する必要がありそうです。
WSL2で rails test:system を動かす為の設定
options.add_argument('--headless')
こっちは試していません。