はじめに
RubyにおけるBDDを学ぶにあたり、今でも貴重な情報源である書籍「The RSpec Book」ですが、Rails 3.0.0前提の内容になっています。
今やRailsは4.0までリリースされていますが、Rails3との差異はかなり大きなものです。
この本の内容を、Rails4.0.x及び最新バージョンのRSpec/Cucumberで実践するのは、おそらくエラーが大量発生することが予想され、さすがに無理があります。
なので、おとなしく本の最初で示されている各種gemのバージョンそのままのものを使うことが賢明です。
本の内容を滞り無く進めて大筋を理解してから、次にRails、RSpec、Cucumberの最新バージョンを学びましょう。
しかし、ちょっとした問題が……
Rails 3.0.0 がインストールできない
ここでは、Rubyは1.8.7を使う事を前提とします。Rubyの導入に関しては、以前私が書いたこの記事をご覧下さい。
まずは、bundlerをインストールする必要があるのですが、今普通に
$ rbenv exec gem install bundler
とすると、バージョン1.3.2以降がインストールされてしまいます。このバージョンのbundlerはバージョンが新しすぎて、Rails3.0.0をインストールできません(エラーが起きます)。
そこで、以下のようにしてバージョン1.0.22をインストールします。
$ rbenv exec gem install bundler --version "= 1.0.22"
その上で、この記事を参考に、Rails3.0.0をローカルインストールしましょう。
Rails3.0.0プロジェクトのGemのインストールに失敗する
第19章 p. 276で、Gemfileの内容が示されているのですが、このままだとBundlerがRakeやRSpec、Cucumber、依存関係で必要なnokogiriなどについて、最新バージョンをインストールしようとしてしまい、エラーが発生します。
そこで、古いバージョンを指定する必要があります。
私の方で検証済みのGemfileを以下に示しますので、この通りにやってください。
source 'http://rubygems.org'
gem 'rails', '3.0.0'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'sqlite3-ruby', :require => 'sqlite3'
gem 'rake', '= 0.8.7'
group :development, :test do
gem "rspec", "= 2.0.0"
gem "rspec-rails", "= 2.0.0"
gem 'nokogiri', '= 1.5.10'
gem "cucumber", "= 0.9.2"
gem "cucumber-rails", "= 0.3.2"
gem "webrat", "= 0.7.2"
gem "database_cleaner", "= 0.5.2"
end
# Use unicorn as the web server
# gem 'unicorn'
# Deploy with Capistrano
# gem 'capistrano'
# To use debugger
# gem 'ruby-debug'
# Bundle the extra gems:
# gem 'bj'
# gem 'nokogiri'
# gem 'sqlite3-ruby', :require => 'sqlite3'
# gem 'aws-s3', :require => 'aws/s3'
# Bundle gems for the local environment. Make sure to
# put test-only gems in this group so their generators
# and rake tasks are available in development mode:
# group :development, :test do
# gem 'webrat'
# end
以上。あとは本の内容を進めて行きましょう。Good Luck!
その他、気になったこと
いまさらWebrat?
21章では、Webratを使った、ブラウザシミュレート型のテストについて書かれています。capybara全盛の時代に今更Webrat? とも思ったのですが、調べてみるとcapybaraはWebratからインスパイアされており、多くの関数で後方互換性があるとのことです。
なので、この本でWebratを使って学んだテスト作法は、おそらく将来capybaraを使う際にも活かせると思います。