Rails4+RSpec+Capybaraでよく使うマッチャ&メソッド22個+α
Rails4のレスポンスをRSpecでテストする際にCapybaraを使っているのですが、マッチャやメソッドの使い方を調べることが多いのでまとめてみました。
Capybara / RSpec / Rails / Ruby
例えば①ログインする、②表示内容を確認する、③フォーム入力する、という流れを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'
attach_file 'attach_file_id', '/path/to/image/file.jpg'
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('input[type=hidden][name="p[code]"]').native[:value]).to eq '1' }
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 }
それぞれメソッドやマッチャの使い方については以下の記事をご覧ください。
layout: default title: Rails4+RSpec+Capybaraでよく使うマッチャ&メソッド22個+α —
Rails4+RSpec+Capybaraでよく使うマッチャ&メソッド22個+α
- allメソッドで要素リストを取得する(2014/10/11)
- Basic認証が必要なページをテストする(2014/10/11)
- checkメソッドでチェックボックスを選択する(2014/10/11)
- chooseメソッドでラジオボタンから要素を選択する(2014/10/11)
- click_onメソッドでボタンをクリックする(2014/10/11)
- fill_inメソッドでフォームにテキストを入力する(2014/10/11)
- find_buttonメソッドでボタン要素を取得する(2014/10/11)
- find_by_idメソッドでid要素を取得する(2014/10/11)
- find_fieldメソッドでフィールド要素を取得する(2014/10/11)
- find_linkメソッドでリンク要素を取得する(2014/10/11)
- findメソッドでオブジェクトを取得する(2014/10/11)
- have_buttonマッチャで指定したボタンを確認する(2014/10/11)
- have_checked_fieldマッチャで指定したチェックボックス/ラジオボタンを確認する(2014/10/11)
- have_contentマッチャでコンテンツ内容を確認する(2014/10/11)
- have_cssマッチャで指定したタグの内容を確認する(2014/10/11)
- have_fieldマッチャで指定した入力フィールドを確認する(2014/10/11)
- have_linkマッチャでリンク内容を確認する(2014/10/11)
- have_selectマッチャで指定したセレクトボックスの選択内容を確認する(2014/10/11)
- have_titleマッチャでタイトル内容を確認する(2014/10/11)
- have_unchecked_fieldマッチャで指定したチェックボックス/ラジオボタンを確認する(2014/10/11)
- ログインが必要なページをテストする(2014/10/11)
- find&nativeメソッドでmeta要素をテストする(2014/10/11)
- nativeメソッドでネイティブオブジェクトを取得する(2014/10/11)
- selectメソッドでセレクトボックスから要素を選択する(2014/10/11)
- uncheckメソッドでチェックボックスを選択解除する(2014/10/11)