りつくろいす

英語が苦手です

現場で使えるRuby on Rails 5 速習実践ガイドで詰まった

初めに

自分は初学者のため、なぜこの問題に対してこれで解決したのか理解できていません
解決した理由がわかる方は適宜教えていただきたいです

実行環境

Windows 10
WSL Ubuntu 18.04.4 LTS
Rails 6.0.2.2
Ruby 2.7.0

どこで詰まった

「現場で使えるRuby on Rails 5 速習実践ガイド 5.2対応」P.205の初めてテストを実行するところ。 本に沿って該当のコマンドを実行すると以下のようなメッセージが出る

Failure/Error:
  describe 'タスク管理機能', type: :system do
    describe '一覧表示機能' do
      before do
        # ユーザーAを作成しておく
        user_a = FactoryBot.create(:user, name: 'ユーザーA', email: 'a@example.com')
        # 作成者がユーザーAであるタスクを作成しておく
        FactoryBot.create(:task, name: '最初のタスク', user: user_a)
      end

      context 'ユーザーAがログインしているとき' do

Webdrivers::BrowserNotFound:
  Failed to find Chrome binary.

解決方法

そもそもchromedriver-helperのサポートが終了していてGemfileを探してもchromedriver-helperの記述がありませんでした。
※参考
qiita.com

もう少し探してみるとこんなページもあった

gist.github.com

これは速習実践ガイドのサポートサイト(正誤表)のページにも載っていて上記ページのAに沿えということであった

book.mynavi.jp

しかし、上記ページに沿って作業してやっても一向に最初のエラーから変わらなかった
最終的にたどり着いて解決したページは以下である

teratail.com

上記ページには書いてないがwindows 10とwslにそれぞれgoogle chromeをインストールしてやり、
さらにchrome-driverをwindows 10にダウンロードしてやった後、
以下のようにspec/spec_helper.rbを変更してやればよい(バージョンを合わせる必要がある)
(自分はchromedriverをC:\Bin\chromedriver_win32に置いています)

require 'capybara/rspec'
require 'selenium-webdriver'

RSpec.configure do |config|
  config.before(:each, type: :system) do
    Selenium::WebDriver::Chrome::Service.driver_path = "/mnt/c/Bin/chromedriver_win32/chromedriver.exe"
    driven_by :selenium_chrome_headless
  end
  # rspec-expectations config goes here. You can use an alternate
  # assertion/expectation library such as wrong or the stdlib/minitest
  # assertions if you prefer. 
…

このように変更してやることでtestを実行することが可能です
なぜ、config.before下にpathを置かないといけないのか、wsl上のgoogle-chromeがなぜ必要なのかわかりません
申し訳ないです
冒頭にも書きましたがなぜかわかる方は教えていただけると幸いです