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 だと取得できるようです。

About

例によって個人のなんちゃらです