Sooey

2016-04-02 17:57:46 +0900

CircleCI上でCapybara, Poltergeist, PhantomJSを利用したテストがMouseEventFailed失敗する問題を解消した。

以下のような構成のRailsアプリをCircleCI上でビルドすると、Capybara::Poltergeist::MouseEventFailedという例外が発生してテストが失敗するケースがあった。

  • Rails 4.2.x
  • RSpec 3.4.x
  • Capybara 2.6.2
  • Poltergeist 1.9.0
  • PhantomJS 2.1.1 (CircleCIのプロジェクト設定でUbuntu 14.04 (Trusty) containerを利用するように設定しておく必要あり)

この時、失敗の原因となっているテストコードは、

click_link '日本語のラベル'

のようなもの。

調査のためにCircleCIにSSHで接続し、テストコードにsave_screenshot('test.png', full: true)を追加&実行して取得した画像ファイルをscpでローカルにダウンロードして確認してみたところ、日本語フォントが無い状態でページがレンダリングされており「日本語のラベル」に該当する要素がページ上では目視できない状態になっていた。

そこで、cricle.ymlに以下のようなエントリを追加してビルド前に日本語フォントがインストールされるようにすることで、テストが無事に成功するようになった。

dependencies:
  pre:
    - sudo apt-get install fonts-migmix