トップ «前の日記(2012-04-17) 最新 次の日記(2012-04-22)» 編集

2012-04-20 [長年日記]

_ 最小限rspec-capybara-mechanizeの準備

※ capybara は 2.0 で request spec ではなく feature spec で動くようにするなど API 変更が入っています。下のエントリは capybara 1.x 時代のものなので、gem のバージョンも 1.x になるように制限してあります。

PHP も end-to-end は RSpec で書こうと思っているという話は先日書きましたが、以前は capybara-mechanize を単独で動かしただけで rake で回せる環境になってなかったので、それを最小限の構成で準備してみました。

minimal rspec-capybara-mechanize env ― Gist

を clone して bundle install すればだいたいすぐ使えます。中身はこんな感じ。短い。ステキ。

include Capybara

は Capybara のドキュメント見ると Capybara::DSL になってるんですけど、何も考えずに bundle install した capybara ( version 0.4.1.2 ) では Capybara::DSL なんてねーよ!と怒られてしまいました。どうなってんだ。

[追記] どうもたまたま自分の入れた環境は依存性の関係で 0.4 になってしまい、include Capybara::DSL は怒られてしまうという状況のようです。gist を update して 1.0 以上でも 0.4 でもどっちでも動くようにしておきました。

構成としては

Gemfile
Rakefile
app/
spec/requests/spec_helper.rb
spec/requests/**/*_spec.rb

みたいな感じを考えてます。これで

require File.dirname(__FILE__) + "/../spec_helper"

describe 'Index' do
  before {
    visit '/'
  }
  it {
    body.should include('Copyright')
  }
end

みたいなテストが書けます。ひゃっほう。

使い方はいつものように

bundle exec rake spec:requests

です。

気をつけなきゃいけないのは、Capybara は RackTest じゃないと response とかメタデータが取れないっぽいところ。はっきりそう書かれているのを読んだわけじゃないんですが、

Capybara の README 意訳 - おもしろWEBサービス開発日記

を読むと Selenium では session や request にアクセスできないと書かれています。Mechanize だと取得できるようです。

本日のツッコミ(全2件) [ツッコミを入れる]
_ os0x (2012-04-20 20:08)

capybaraの現行バージョンは1.1.2で、0.4.1.2は一年かそれ以上前のバージョンですね。 <br>Capybara::DSLはcapybara 1.0以上です。

_ wtnabe (2012-04-20 22:19)

マジすか! 何も指定しなければ最新版が入るものと思い込んでました…。とほほ。