Cucumberをはじめてみた
昨日、『はじめる! Cucumber』(諸橋恭介著、達人出版界、2010年、v0.9.1)を買い、本のタイトルどおり、Cucumberを勉強しはじめました。とりあえず、第4章までやってみたので、Ruby on Rails 3での注意点など書きたいと思います。第5章以降は、また後日。
プロジェクトの作成
プロジェクト作成時、「-T」を付けてTest::Unitファイルの作成をスキップ。
$ rails new cuke-handson -T
Gemfile
gemコマンドでインストールするcucumberなどを、Gemfileに追加し、「bundle install」。
group :development do gem 'rspec-rails' gem 'cucumber-rails' gem 'i18n_generators' end group :test do gem 'rspec' gem 'cucumber' gem 'webrat' gem 'launchy' end
読み替え
ruby script/generateは、rails generateに。例えば:
$ ruby script/generate cucumber ja --webrat --rspec
これを、以下のように読み替えて実行しました。
$ rails generate cucumber ja --webrat --rspec
Webratのバグ修正*1
Webratがインストールされているディレクトリ*2にある、lib/webrat/core/session.rbを修正。
def current_host URI.parse(current_url).host || @custom_headers["Host"] || default_current_host end def default_current_host adapter.class==Webrat::RackAdapter ? "example.org" : "www.example.com" end
Cucumberのバグ修正*3
APP_ROOT/features/support/env.rb
require 'webrat' require 'webrat/core/matchers' Webrat.configure do |config| config.mode = :rack config.open_error_files = false # Set to true if you want error pages to pop up in the browser end World(Webrat::Methods) World(Webrat::Matchers)
細かい所
- 本書はRSpecによるテストは無いのですが、「bundle install」した後、「rails generate rspec:install」を実行。
- p.7の「RAILS_ENV=cucumber rake gems:install」はやらなかった。
- p.21でi18nジェネレータを実行すると、config/application.rbを上書きしようとするので「Y」をする。
- p.22でapp/views/messages/new.html.erbを編集しているけど、同ディレクトリの_form.html.erbを編集する。
- HTTP_ACCEPT_LANGUAGEヘッダを参照するはずなのに、p.24のlocalized_steps.rbで「HTTP_」が抜けてる。
- p.31のi18n_scaffoldが動かない。本書とは関係ありませんが、i18nジェネレータのlib/generatorsにi18n_scaffoldがないんですが...なんでだろう?
- p.32-33のヘルパーをApplicationHelperに書き、ApplicationControlerでincludeした。
「rake db:migrate」した後は、「rake db:test:prepare」した。本書には書いてないんですが、これって必要なかったのかなぁ...*4
余談
RSpecとCucumberの棲み分けというか、使い方の違いが段々と実感できるようになってきました。これはあくまでも私の主観で、間違っているかもしれませんが、Selenium IDEでやることをCucumberでやってる感じかなぁ...
*1:Webrat and Rails: Using assert_contain after click_button gives me “You are being redirected”
*2:「$ bundle show webrat」でわかります。
*3:undefined method `visit' for cucumber
*4:(2/10追記)APP_ROOT/lib/tasks/cucumber.rakeで、db:test:prepareしているので必要なかった。