🐹
【初心者】Capybaraさん
状況
- rubyのrspecを用いてテストコードを作成している際に、生成AIからお勧めされて利用
- 今までは、管理者画面にログインする際に
post admin_login_path, params: { session: { email: 'hogehoge', password: 'password' } }
と記載していたが、capybaraを利用することにより、
visit admin_login_path
fill_in 'session[email]', with: 'hogehoge'
fill_in 'session[password]', with: 'password'
click_button 'ログイン'
とGUI上の操作イメージがわかりやすくなった
- 名前は聞いたことがあったが、実際に利用してみて改めて便利だと感じたので導入として調べてみた
内容
Capybaraとは
-
capybara
は、Ruby用のウェブアプリケーションテスト用のgem - 主にRailsなどのウェブアプリケーションの自動化テストを行う際に利用される
- 以下にその役割や利用シーン、具体的な使い方を調査
1. Capybaraの役割
- ウェブアプリケーションのテストを簡単に記述するためのDSL(ドメイン固有言語)を提供する
- ブラウザ操作(クリック、フォーム入力、ページ遷移など)をシミュレートする
- 様々なドライバ(Selenium, Rack::Test, WebKitなど)をサポートし、ブラウザの動作をエミュレートする
- JavaScriptを含む動的なコンテンツのテストにも対応
2. 使用する場面
-
E2Eテスト(End-to-End Test)や受け入れテストで、アプリケーション全体のユーザー体験を検証する際
- 例: ユーザーがログインして記事を投稿する一連のフローをテスト
- JavaScriptを利用した動的ページのテスト
- フォームのバリデーションやエラーメッセージの確認
3. 具体的な使い方
以下にRailsアプリケーションでのCapybaraの利用例を示す
(1) セットアップ
Gemfileに以下を追加し、bundle install
を実行
# Gemfile
group :test do
gem 'capybara'
gem 'selenium-webdriver' # Seleniumを利用する場合
gem 'webdrivers' # 必要に応じて
end
(2) 基本的なテストコード
Capybaraを使用してログイン機能をテストする例
require 'rails_helper'
RSpec.feature "User Login", type: :feature do
scenario "ユーザーがログインできることを確認" do
# テスト用ユーザーの作成
user = User.create!(email: "test@example.com", password: "password")
# ログインページにアクセス
visit new_user_session_path
# フォームに入力
fill_in "Email", with: user.email
fill_in "Password", with: "password"
# ログインボタンをクリック
click_button "Log in"
# ログイン成功メッセージを確認
expect(page).to have_content "ログインしました"
end
end
(3) JavaScript対応テスト
CapybaraはデフォルトでJavaScriptをサポートしないが、Seleniumなどのドライバを使うことで対応可能
RSpec.feature "Dynamic Content", type: :feature, js: true do
scenario "JavaScriptで動的に追加される要素をテスト" do
visit some_dynamic_page_path
# ボタンをクリックして動的な要素を表示
click_button "Show Content"
# 動的に表示された要素を確認
expect(page).to have_content "動的に追加されたコンテンツ"
end
end
(4) ヘルパーメソッドを活用した例
複数のテストケースで使う共通操作をヘルパーメソッド化することが可能
module LoginHelper
def login_as(user)
visit new_user_session_path
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button "Log in"
end
end
RSpec.configure do |config|
config.include LoginHelper, type: :feature
end
RSpec.feature "User Dashboard", type: :feature do
let(:user) { User.create!(email: "test@example.com", password: "password") }
scenario "ログイン後にダッシュボードが表示される" do
login_as(user)
expect(page).to have_content "ダッシュボード"
end
end
4. 主なメソッド一覧
-
visit(path)
: 指定したURLまたはパスを訪問 -
fill_in(field, with: value)
: フォームフィールドに値を入力 -
click_button(button_text)
: ボタンをクリック -
click_link(link_text)
: リンクをクリック -
have_content(text)
: ページに指定のテキストがあるか確認 -
find(selector)
: 指定のセレクタに一致する要素を取得
まとめ
- Capybaraは、ウェブアプリケーションのテストにおいて、ユーザー目線で操作をシミュレートできる便利なツール
- 特にフォーム入力やページ遷移、JavaScriptを伴う動的ページの動作確認に力を発揮
所見
- 調べてみて上記メソッド以外にも様々なメソッドがあることを知り、capybaraの奥深さを学んだ
- 一方で、javascriptをテストする際の
:selenium
や:rack_test
といったドライバの理解がまだ足りていないことにも気づいたので、次に学んでみたい
例)Capybara.javascript_driver = :selenium_chrome
とした際の
ChromeDriverとの整合性 など
参考
Discussion