Railsアプリをインテグレションテストするために、Capybaraをtest-unitといっしょに使う
「Capybara test unit」とか検索すると、なんか正解が出てこない気がするので、メモ。test-unit-capybaraとかあるけど、なにをやってくれるのか良くわからん。
結局のところ、必要なのは次の3つ。
- Gemfileに書く
- capybara/railsをrequireする
- IntegrationTestの中でCapybaraをincludeする
そもそもCapybaraってなに? Cucumberと関係あるの?
私がCapybaraについて聞いたのはCucumberに関する文脈だったせいで、ちょっと混乱していたのですが、この二つは特に関係ありません。
Capybaraというのは
インテグレーションテストしやすくするためのフレームワーク
で、
- visit "/"
- click "button"
みたいなAPIを提供してくれて、ブラウザの動作をテストでシミュレーションしやすくするためのものです。
Cucumberというのは
で、
- Given I have entered 50 into the calcurator
- かつ "ウォッチする"ボタンをクリックする
とか書くためのなんかです。これはこれで面白い試みだと思いますし、ちょっとやってみたら結構楽しいのですが、まあ私には必要ない。で、Cucumerbのなかで「クリックする」とかいうやつをうまいこと処理するために使用しているのが、webratとかcapybaraとかです。
Gemfileを更新する
gem 'capybara'
と書きましょう。
IntegrationTestでCapybaraをincludeする
Railsでインテグレイションテストすると、ActionDispatch::IntegrationTestとかいうクラスを使うみたいなので、この中で、
include Capybara
します。
2番と合わせて、test_helperに
require 'capybara/rails' class ActionDispatch::IntegrationTest include Capybara end
とか書いておくのが良いと思います。
テストを書く
test "visit root and got redirected" do visit "/" assert_equal "/ja", current_path end
とか、普通にCapybara::DSLに定義されてるやつを使います。
まとめ
さあ、テスト書くぞー