【RSpec】Capybaraについて

はじめに

 RailsRSpec+Capybraの環境で開発、テストを行っているので、Capybaraについて整理しておきます。

Capybaraとは?

Capybaraは、Webアプリケーションのインテグレーション・テストを補助する為のライブラリです。 Capybaraが提供する本質的な機能としては、DSLとDriverの2点のみです。

DSLドメイン固有言語)

特定の問題に特化したコンピュータ言語です。Capybaraはテスティングフレームワークを操作する命令を、それぞれのフレームワークに依存しない形で提供します。つまり、テスティングフレームワークであるCucumberやRSpec,Test::Unitなどを透過的に利用できます。

ドライバー

Webアプリケーションのインテグレーション・テストには、ブラウザもしくはそれに類するものが必要です。その為に、Seleniumのようにブラウザを操作するフレームワークや、WebKitのようなブラウザのレンダリングエンジンを直接使う方法があります。Capybaraは、それらをドライバとして扱うことが出来ます。

Capybara-DSLのはなし

CapybaraのDSL

画面遷移
メソッド 機能
visit GETページで遷移します

click_link click_bottun click_on

リンクとクリック機能
メソッド 機能
click_link(' id ') ID指定でリンクをクリック
click_link( 'リンクテキスト' ) リンクのテキスト名でクリック
click_button('ボタン名') ボタン名でクリック
click_on( 'テキスト' ) リンクかボタンどちらかをクリック
click_on( ’value' ) ボタンの値指定でクリック
フォーム入力機能
メソッド 機能
visit GETページで遷移します
fill_in('ラベルの名前') それぞれの入力フォームに値を入れる
choose('ラジオボタン') ラジオボタンを選択する
check('チェックボタン') チェックボタンを選択します
uncheck('チェックボタン') チェックボタンの洗濯を外す
attach_file('image', '/path/to/image.jpg') 画像を添付します
select('Option', from: 'Select box') セレクトボックスを選択する

スコープ機能

スコープ機能を利用することで、特定のエレメント下のみ操作できます。

within("li#unique_name") do
  fill_in 'Name', :with => '五十嵐さん'
end

マッチャ

expect(page).to have_content('この文字見つかる') #このページにあるかな?
expect(current_path).to eq(root_path) #パス合ってる? 

別タブに移動して操作する

# 最後に開いたタブに移動している
switch_to_window(windows.last)

参考資料

Capybara-DSLのはなし