タオルケット体操

サツバツいんたーねっと

Mac上でCucumber + capybara + PhantomJSを動かすまでの解説

photo by amadej2008

UIの振る舞いテストの自動化ツールって、今は何がデファクトなんですかね?
よくわかんないんで枯れててデファクトっぽいCucumber + PhantomJSの組み合わせでやろうとおもいます。

ぶっちゃけLinuxで動かせばいいじゃんみたいな感じがなくもないんですが、手元で動かせるに越したことはないですよね。
そしてMacで動かすのは色々と大変だったのでメモっておきます。

PhantomJSのインストールと動くようになるまで

PhantomJSは、いわゆるヘッドレスブラウザです。
GUI部分を省いたWebkit(昔のChromeとかの中身)で、CUIしかない環境であってもUIコミコミでの受け入れテスト自動化が行えるいかしたツールです。IEのおしりふきをしないのであればこれで十二分でしょう。

PhantomJSのインストールはみんな大好きhomebrew……ではなく、バイナリでインストールしましょう。
Webkitだけあって、自分でビルドすると大変なことになります。とはいえ、いちいちブラウザ越しにポチポチやるのはだるいのでbrew caskを使います。
brew caskについての説明はここではしません。またgemやbundlerなどのなどの基本的なRubyツールについては理解している前提で話を進めます。

$ brew cask install phantomjs

これで入ります。
試しにバージョンをみてみましょう。

$ phantomjs --version

バージョンが表示されましたか? このブログの執筆時点では2.0.0がstableです。
された人は次に進んでください。

うまくバージョン情報が表示されず、シェルにkillされてしまった人は対策が必要です。

upxのインストール

upxとは、バイナリを実行可能なまま圧縮、解凍するためのツールらしいです。
shellにkillされてしまってうまく動かない場合、これで解凍してやることで動くようになるかもしれません。

$ brew install upx
$ upx -d /opt/homebrew-cask/Caskroom/phantomjs/2.0.0/phantomjs-2.0.0-macosx/bin/phantomjs

再度実行してみてください。動きましたか? じゃあ次にいきましょう。

nokogiriインストールの準備

nokogiriとは、Rubyでxmlをいい感じにアレするためのgemです。
capybaraを始めとして、いろいろなgemがこいつに依存しているようです。

便利っぽいんですが、いかんせん依存ライブラリが多かったりするためにしょっちゅうインストールに失敗します。個人的にRubyにおけるプログラミング初心者殺し的存在だとおもってます。

nokogiriは、libxml2とその拡張であるlibxsltが必要です。
Macでは稀によくあることですが、標準で入っているlibはバージョンが古いんだかなんだかでgemのインストールに失敗します。

ここはみんな大好きhomebrewで最新のlibを導入し、ビルドに使えるよう整えてあげます。

$ brew install libxml2 libxslt
$ brew link --force libxml2
$ brew link --force libxslt

これでOKです。
あとはbundler越しにgemをインストールするときのために

$ bundle config build.nokogiri --use-system-libraries

とconfigを設定してあげましょう。

実行

あとはインストールして、featureとstepを書いてやれば万事OKです。

$ git clone some-nice-bdd-repo
$ cd some-nice-bdd-repo
$ bundle install
$ bundle exec cucumber

やれましたか? やりましたね。

以上! めんどくさいですね? Linuxでやったほうが良さそうですね?

IEでのテストも自動化したいので、そのうちに気が向いたらCucumber + capybara + Seleniumの記事も書こうとおもいます。