1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【統合テスト】Capybaraでテストを書けるようになろう!

Posted at

Capybaraとは

WebブラウザとWebアプリケーションの間で交わされるHTTP通信をエミュレート(模倣)するためのライブラリのことです。
特定の要素をクリックした利、フォームから値を入力したり、表示状態を確認したりできる。
フューチャスペック(統合テスト)に最適です。

事前準備

1.Gemfileに以下を記載し、bundle installする。
※Rails5.1以降ではデフォルトで入っています。

group :test, :development do 
  gem 'capybara'
end

2.spec/rails_helper.rbに以下を記載する。

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つに分類します。

spec/features/create_user_spec.rb
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)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?