読者です 読者をやめる 読者になる 読者になる

spring of life

技術、ときどき日常のブログ(予定)

capybara-webkitのインストール

RSpecでビューを操作しながらテストしたい時に、capybaraとか使ったりするけど、capybaraだけだとjavascriptが動かないらしい

そこでちょっと困ったので動くようにしようとcapybara-webkitをインストールしたんだが、めちゃくちゃ面倒くさかった。。。

やったことを順番に書いていくと、


1. Gemfileにcapybara-webkitを追加

gem 'capybara-webkit'

これで普通にbundle installとかやると

Command 'qmake ' not available

とか言われてエラーになる

2. qmakeをインストール

Qtを入れればいいらしい。が、これがめちゃ時間かかる(泣)

しかもOSごとにインストール方法が変わるっぽい(自分のはCentOS6.6)

githubに書いてあったのでこれを見ながらインストール

gmakeが2時間くらいかかった(というか夜遅かったので途中で寝たw)

これでようやくbundle installは無事にできるようになった。が

まだテストが落ちて↓みたいなエラーが出る

Capybara::Webkit::ConnectionError:
       /usr/local/rvm/gems/ruby-2.2.0@<gemset>/gems/capybara-webkit-1.11.1/bin/webkit_server failed to start.

ちなみに、javascriptを動かすにはテストコードに

describe 'hogehoge', :js => true do

みたいな感じで指定してあげないといけないっぽい

3. Xvfbのインストール

CUIでテストを動かしたい場合はまだやることがいろいろあってだな。。。

まず1つは仮想のディスプレイを作るためにXvfbというのをインストールしないといけないらしい

これは↓のコマンドをたたけばOKだった(1つ目のはいらないかも?)

# yum groupupdate "X Window System"
# yum install xorg-x11-server-Xvfb

4. headlessのインストール

で、もう1つがheadlessのインストールで、これはGemfileに追加してbundle installすればおしまい!

5. 各種設定をヘルパーに記載

webkitを使うようにするのとheadlessを起動する

Capybara.javascript_driver = :webkit
Headless.new.start

さらに、利用するホストを指定する

Capybara::Webkit.configure do |config|
  config.block_unknown_urls
  config.allow_url('http://<アクセスするホスト名(:ポート)>)
end

これで自分の環境ではテストは動いた!

補足
テストが通ったのはいいが、ちょっと警告が2つほど出るようになった

capybara-webkit-1.11.1だとこの2カ所で出てた

lib/capybara/webkit/driver.rb

def browser
  warn "[DEPRECATION] Capybara::Webkit::Driver#browser is deprecated."
  @browser
end
src/Server.cpp

bool Server::start() {
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
  QTextStream(stderr) <<
    "WARNING: The next major version of capybara-webkit " <<
    "will require at least version 5.0 of Qt. " <<
    "You're using version " << QT_VERSION_STR << "." << endl;
#endif

  connect(m_tcp_server, SIGNAL(newConnection()), this, SLOT(handleConnection()));
  return m_tcp_server->listen(QHostAddress::LocalHost, 0);
}

気にならない人はいいけど、気になる人は何とかしたいとこだね。。。

僕はもう疲れたので適当に対応(´・ω・`)