ちょこっとIっTぇみる

個人的に気になるITネタを気分でつらつらと。

vagrant on mac で rspec with capybara (selenium)

mac vagrant 環境の railsのテストを rspec with capybara (Selenium)を使ってテストしたいってときに

Vagrant環境下におけるブラウザテストについて(Chrome編) | hifive開発者ブログ
を参考(◎とてもわかりやすい!!)にやってみた上で個人的に迷った点を補足した内容です。

前提

vagrant側でrails+rspec with capybara 環境構築済み

gem 'rspec-rails'
gem 'capybara'
gem 'selenium-webdriver'

macchromeインストール済(ブラウザはmac上のものを使う)

設定の手順

1) Vagrantfileに下記を追加 し、vagrant 起動

Vagrant.configure(***) do | config | 〜 end の間に記載

 config.vm.network :forwarded_port, guest: 3000, host: 3000  

仮想環境側の3000番ポートがそのまま母艦の3000番ポートにつながっています。そのため母艦の http://localhost:3000/ にアクセスすると、仮想環境の http://localhost:3000/ にアクセスしたのと同じになります。

・・母艦って表現わかりやすいなぁ。ホストとゲストってピンとこないし。

2) vagrant環境の rails 開発環境の spec/rails_helper.rb に下記 追記

 # use chrome driver with capybara
 Capybara.javascript_driver = ENV['DRIVER'] ? ENV['DRIVER'].to_sym : :chrome

 Capybara.app_host = [:safari, :chrome, :firefox, :iphone, :ipad].include?(Capybara.javascript_driver) ? "http://localhost:3000" : "http://10.0.2.2:3000"
 Capybara.default_wait_time = 10
Capybara.run_server = false

 Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new app,
   browser: :remote,
  desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome,
   url: "http://10.0.2.2:4444/wd/hub"
 end

参考元からコピペ後 IPを 「10.0.2.2」に変更
10.0.2.2 は vagrant(ゲスト)側からみた 「母艦」(ホスト)側のIPとなるとのこと↓
参考:VirtualBox 内のゲスト OS からホスト OS にアクセスしたい · GitHub

3)vagrant環境 で railsサーバ 起動 = localhost:3000 で動く

rails s

※当方 動かず。。→ rails 4.2 だったため

rails s -b 0.0.0.0

参考:rails sで起動したサーバにブラウザからアクセスできない - Qiita

4) Selenium Server を ダウンロードし、起動

macvagrant側ではありません。)上で作業します。

ダウンロード

こちらより、バージョンを選び 、standalone版をダウンロード
→ 当方は 2.4を使った。最新版はエラーがでたので。

起動 (しつこいですが、mac上で!
java -jar /Users/mac_user/Downloads/selenium-server-standalone-2.40.0.jar


5) rspec テストの実行 (vagrant側)

bundle exec rspec spec/features/path/to/xxx_spec.rb

以上。