RailsのIntegration TestにCapybaraを導入

平日のサラリーマンならこれから仕事だろって時間に久しぶりの投稿。

現在インフルエンザで休養中で、やっと体調も回復してきて、何もしていない時間を暇と思えるようになってきたものの、まだ人に感染させてしまう危険があるため、大人しく自宅待機というか自室引きこもっている。

家の人にはうつさずに済んだ・・・よう・・な気がする。

こういう時、プログラマって、やることいくらでもあって得だと思う。

 
 

さて、RailsのテストにCapybaraを試してみようと思って、公式サイトに従って導入してみた。

 

ハマりポイントもあったため、導入部分(ほんとうに動作するね~といったところまでの内容)を紹介しておく。

CapybaraはテストフレームワークにRailsデフォルトのtest/unitだけでなくcucumberやRSpecなどにも対応しているが、私の場合はtest/unitを使用していて、以下の紹介でもtest/unitを使用していること前提になっている。

Capybaraの導入手順

Capybaraをインストール

>gem install capybara

 

Gemfileに追加

公式サイトだとgem 'capybara'が必要とは書いていないが、これが無いと動作しなかった。

具体的には、gem 'capybara'を記述しておかないと、この後の説明で登場する、test_helper.rbでのrequire 'capybara/rails'が失敗する。

私、ハマった。

 

bundleの実行

>bundle

 

test_helper.rbに追加

test_helper.rbの末尾に以下追加。

 

テストを作成

テスト用にscaffoldを作成して

>rails g scaffold post title:string body:text

 

Integration Testを作成。

一応Capybaraが動作するねという確認であって、CapybaraのDSLについてはまだあまり詳しくないためあまり参考にしないほうがいい。

 

実行すると

>rake test:integration
Rack::File headers parameter replaces cache_control after Rack 1.5.
Run options:

# Running tests:

.

Finished tests in 0.237013s, 4.2192 tests/s, 4.2192 assertions/s.

1 tests, 1 assertions, 0 failures, 0 errors, 0 skips

成功。

本当に動作しているのか怪しい人は、コントローラあたりにdebugger仕込んでからテスト実行すると、ちゃんとブレークしてくれる。(よくGemfileにgem 'debugger'記述忘れてて止まってくれないこともあるけど)

Driver

Capybaraは、実際にFirefoxブラウザ上でシミュレートしてくれるSeleniumドライバや、ブラウザは使わないがJavaScriptのテストまでできるCapybara-webkitドライバなどにドライバを変更したりできる。

私の場合はJavaScriptをゴリゴリ書いているわけではないし、とりあえずはデフォルトであるRackTestドライバを使用して、限界を感じたら他のものにも手を出そうと思う。

あとがき

いまのところ、やっとCapybaraが動いたバンザイ、といった状態で、まだこれからいろいろと調べていかないといけない。

RailsデフォルトのIntegration Testそのままよりは、よっぽど使いやすくてテストにもなって、Capybaraサイコー!な心理状態だったりする。

 

あと、どうでもいい話なんだけど、バイオハザード6のエイダの感謝のセリフが「カピバラ」って言ってるようにしか聞こえないのは、私がRails開発しててCapybaraを知っているせいなのだろうか・・。

コメントを残す

トラックバック: http://pgnote.net/wp-trackback.php?p=1893