Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

Capybara | RailsのブラウザテストのためCapybaraをインストール

概要

RailsのブラウザテストのためCapybaraをインストール

内容

インストール

・Gemfileに下記を追加

gem "capybara", "~> 2.1.0"
gem "capybara-webkit", "~> 1.0.0"
gem "poltergeist", "~> 1.3.0"
gem "launchy", "~> 2.3.0"

capybara-webkitとpoltergeistはJavaScriptのドライバ。
後者はヘッドレスで実行されるため高速。
・bundlerの実行
※エラーになる場合は

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libqt4-dev

を実行してからbundlerを再実行すること。

設定

spec_helperに下記を追記。
コメントアウト部はpoltergeistを利用する際に有効化する

  require 'capybara/rspec'

  Capybara.javascript_driver = :webkit
  Capybara.register_driver :rack_test do |app|
    Capybara::RackTest::Driver.new(app, :browser => :firefox)
  end
# Capybara.javascript_driver = :poltergeist
# Capybara.register_driver :poltergeist do |app|
#   Capybara::Poltergeist::Driver.new(app, :js_errors => false, :timeout => 60)
# end
テスト用フォルダを作成

spec/integrationフォルダを作成

mkdir integration
問題

実行時に
undefined method `visit'
のようなエラーが発生する場合は、spec_helper.rbに

RSpec.configure do |config|
  config.include(Capybara::DSL)
end

を含めれば動作します。

サンプル

下記記事のログイン認証処理を対象にテストするサンプルを作成しました。
Ruby on Rails | ユーザー認証時にBCryptによる暗号化を行う
http://d.hatena.ne.jp/tbpg/20130713/1373714405

sample_spec.rb
require "spec_helper"

describe "sample describe", :type => :feature do
  include Capybara::DSL
  it "sample it" do
    visit "/signin/index"
    fill_in "signin_form_login", :with => 'hoge'
    fill_in "signin_form_password", :with => 'hoge'
    click_on 'サインイン'

    current_path.should =~ /signin\/signin/
    page.should have_content('Login:[hoge]は存在しないユーザーアカウントです')
  end
end
テスト結果
  .

  Finished in 0.15246 seconds
  1 example, 0 failures

  Randomized with seed 0