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