Capybaraとは
WebブラウザとWebアプリケーションの間で交わされるHTTP通信をエミュレート(模倣)するためのライブラリのことです。
特定の要素をクリックした利、フォームから値を入力したり、表示状態を確認したりできる。
フューチャスペック(統合テスト)に最適です。
事前準備
1.Gemfileに以下を記載し、bundle install
する。
※Rails5.1以降ではデフォルトで入っています。
group :test, :development do
gem 'capybara'
end
2.spec/rails_helper.rb
に以下を記載する。
...
require 'capybara/rspec'
...
3,作業フォルダを作成する。
※spec/features配下にファイルを作成して作業していきます。
$ mkdir -p spec/features
使い方
まずは、例としてcreate_user_spec.rb
を書いてみます。
Capybaraの知識0でも、なんとなくやっていることは理解出来るはずです。
まず、シナリオは3つのセクションに分けることがRailsコミュニティの一般的な慣習なので、
Givenセクション、Whenセクション、Thenセクション
の3つに分類します。
require 'rails_helper'
feature 'user', type: :feature do
scenario 'ユーザー作成' do
# Givenセクション(前提条件)
visit new_user_path
click_lick 'ユーザーを作成する'
first("div.links").click_link "新規登録"
# Whenセクション(ブラウザ上の動作)
fill_in "form_customer_family_name", with: "テスト"
fill_in "form_customer_given_name", with: "太郎"
fill_in "form_customer_family_name_kana", with: "テスト"
fill_in "form_customer_given_name_kana", with: "タロウ"
fill_in "メールアドレス", with: "test@example.jp"
fill_in "パスワード", with: "password"
fill_in "生年月日", with: "2021-06-08"
choose "男性"
check "管理者として登録する"
click_button "登録"
# Thenセクション(シナリオの結果確認)
new_user = User.order(:id).last
expect(new_user.family_name).to eq("テスト")
expect(new_user.given_name).to eq("太郎")
expect(new_user.email).to eq("test@example.jp")
expect(new_user.birthday).to eq(Date.new(2021. 6. 8))
expect(new_user.gender).to eq("man")
end
end
メソッドの解説
visitメソッド
visit 遷移したいページのパス
とすることで、指定したページに遷移する。
click_linkメソッド
click_link 'リンク文字列 or aタグのid属性'
とすることで、aタグをクリックする。
fill_inメソッド
fill_in 'ラベル文字列 or input要素のid属性もしくはname属性', with: '入力内容'
とすることで、指定のフォームに値を入力できる。
chooseメソッド
choose 'ラベル文字列 or ラジオボタンのid属性'
とすることで、ラジオボタンを選択出来る。
checkメソッド
check 'ラベル文字列 or input要素のid属性もしくはname属性'
とすることで、チェックボックスにチェックを入れることができる。
click_buttonメソッド
click_button 'ラベル文字列 or input要素のid属性もしくはname属性'
とすることで、ボタンを押下できる。
まとめ
直感的にテストを書くことが出来るし、単体テストで検証しきれない部分までテスト可能なので、使えるようにしておきたい技術だと思いました。
より高度で複雑な統合テストを書く際は、参考に添付してある公式ドキュメントやチートシートを参照しながら進めていくといいと思います。
参考
[teamcapybara / capybara]
(https://github.com/teamcapybara/capybara)
[Capybaraチートシート]
(https://qiita.com/morrr/items/0e24251c049180218db4)