前に作った連載記事へのリンクだけだと結局辿らなくちゃいけなくて面倒なので、利用例をまとめてみました。
※ 元記事:Rails4+RSpec+Capybaraでよく使うマッチャ&メソッド22個+α|江の島CodeStyle
例えば①ログインする、②表示内容を確認する、③フォーム入力する、という流れをCapybaraでテストするとこんな感じになります。
require 'rails_helper'
feature 'post an article', type: :feature do
before do
## Create data
end
feature 'sign in' do
include Warden::Test::Helpers
before(:all) { Warden.test_mode! }
after(:all) { Warden.test_reset! }
let(:user) { create :user }
before { login_as user }
feature 'edit an article' do
before { visit '/' }
subject { page }
it { should have_title 'title' }
it { should have_content 'content' }
it { should have_link('top', href: '/') }
it { should have_css('h1', text: 'title') }
it { should have_css(".user[data-url='http://twitter.com/jack/']") }
it { should have_button('search') }
it { should have_field('title', with: 'title') }
it { should have_checked_field('language', with: 'japanese') }
it { should have_unchecked_field('language', with: 'english') }
it { should have_select('select', selected: 'option') }
it { should have_select('no_select', selected: []) }
feature 'fill in form' do
scenario do
fill_in 'title_id', with: 'title'
select 'option_name', from: 'select_id'
choose 'radio_button_label'
check 'checkbox_id'
uncheck 'checkbox_id'
click_on 'submit'
...
end
end
end
end
end
他にも便利なメソッドが色々用意されています。
before { first('submit').click }
its(:current_url) { should eq 'http://example.com/' }
its(:current_host) { should eq 'example.com' }
its(:current_path) { should eq '/' }
it { expect(find_button('検索').native['class']).to match /btn/ }
it { expect(find_field('title').native['class']).to match /title/ }
it { expect(find_field('title').text).to be_empry) }
it { expect(find_by_id('content').native.children).to have(5).items }
it { expect(find_link('top').native['class']).to match /link/ }
it { expect(all('li')).to have(5).items }
それぞれメソッドやマッチャの使い方については以下の記事をご覧ください。
- 第1回:have_titleマッチャでタイトル内容を確認する
- 第2回:have_contentマッチャでコンテンツ内容を確認する
- 第3回:have_linkマッチャでリンク内容を確認する
- 第4回:have_cssマッチャで指定したタグの内容を確認する
- 第5回:have_buttonマッチャで指定したボタンを確認する
- 第6回:have_fieldマッチャで指定した入力フィールドを確認する
- 第7回:have_checked_fieldマッチャで指定したチェックボックス/ラジオボタンを確認する
- 第8回:have_unchecked_fieldマッチャで指定したチェックボックス/ラジオボタンを確認する
- 第9回:have_selectマッチャで指定したセレクトボックスの選択内容を確認する
- 第10回:click_onメソッドでボタンをクリックする
- 第11回:fill_inメソッドでフォームにテキストを入力する
- 第12回:selectメソッドでセレクトボックスから要素を選択する
- 第13回:chooseメソッドでラジオボタンから要素を選択する
- 第14回:checkメソッドでチェックボックスを選択する
- 第15回:uncheckメソッドでチェックボックスを選択解除する
- 第16回:findメソッドでオブジェクトを取得する
- 第17回:find_buttonメソッドでボタン要素を取得する
- 第18回:find_fieldメソッドでフィールド要素を取得する
- 第19回:find_by_idメソッドでid要素を取得する
- 第20回:find_linkメソッドでリンク要素を取得する
- 第21回:allメソッドで要素リストを取得する
- 第22回:nativeメソッドでネイティブオブジェクトを取得する
- 第23回:find&nativeメソッドでmeta要素をテストする
- 第24回:Basic認証が必要なページをテストする
- 第25回:ログインが必要なページをテストする