Rails 3.0 で cucumber のテストを通す
備忘録。Mac OSX 10.5 環境で Rails 3.0 を使って cucumber でテストを書きます。
インストール
主に下のリンクを参照しました。
http://d.hatena.ne.jp/yuunachan/20101004/1286161317
なお、私の環境(Mac OSX 10.5)では Nokogiri が libxml2 のバージョンが古すぎる!と警告を出してきますが、とりあえず動作に問題はなさそうなので今回は無視する事にします。さらに、元記事に従って capybara も採用する方向で話を進めます。
まずは RAILS_ROOT/Gemfile を編集します。データベースは postgres を使うので、そこもあわせて編集。ここは各自の環境にあわせて下さい。
# gem 'sqlite3-ruby', :require => 'sqlite3' gem 'pg' # 中略 group :cucumber do gem 'rspec-rails', '>=2.0.0.beta.10' gem 'capybara' gem 'database_cleaner' gem 'cucumber-rails' gem 'cucumber' gem 'spork' gem 'launchy' gem 'ramaze' gem 'webrat' end
編集が終わったらインストールコマンドを叩きます。
bundle install vendor/bundle
無事にインストールが済めば gem の準備は完了。cucumber のジェネレータが作動するよう、初期化を行います。
rails g cucumber:install ja --rspec --capybara
準備段階はここまでで完了。
テストする
続いて、実際にテストを書いて動作を確認してみます。こちらは下の記事のサンプルを見ながら試しました。
http://gihyo.jp/dev/serial/01/ruby/0022
まずは scaffold でひな形一式を作成して、テーブルを作成(database.yml の編集をお忘れなく)。
rails g scaffold user email:string name:string age:integer rake db:migrate rake db:test:prepare
無事に通ったら cucumber のフィーチャを作成します。
rails g cucumber:feature users
コマンドが通ると RAILS_ROOT/features/manage_users.feature というファイルができているので、中身をすべて消して書き換えます。
#language:ja フィーチャ: ユーザを管理したい シナリオ: ユーザの登録 前提 "ユーザ登録"ページを表示している もし "user_email"に"example@example.com"と入力する かつ "user_name"に"ProjectHL2"と入力する かつ "user_age"に"17"と入力する かつ "Create"ボタンをクリックする ならば "User was successfully created."と表示されていること かつ "example@example.com"と表示されていること かつ "ProjectHL2"と表示されていること かつ "17"と表示されていること
技評のサイトに載っている情報はやや古いらしく、そのままではテストを通過しなかったため、一部書き換えています。
次に、上で登録した"ユーザ登録"ページとはどこなのかを cucumber に教えてあげるために RAILS_ROOT/features/support/paths.rb を編集します。
module NavigationHelpers # Maps a name to a path. Used by the # # When /^I go to (.+)$/ do |page_name| # # step definition in web_steps.rb # def path_to(page_name) case page_name when /ユーザ登録/ new_user_path else raise "Can't find mapping from \"#{page_name}\" to a path.\n" + "Now, go and add a mapping in #{__FILE__}" end end end World(NavigationHelpers)
利用されている環境が Ruby 1.9 系であれば、上記ファイルにマジックコメントをつけて、日本語のエンコードを指定して下さい。
ここまで終わったらテストを実行してみます。
rake cucumber
色々と表示はされると思いますが、無事にテストが通っていれば
......... 1 scenario (1 passed) 9 steps (9 passed) 0m0.628s
このような文字が表示されているはずです。
追記の追記
Capybara で自前の http-header を仕込みたい時は、以下のアドレスの header_hacks.rb を RAILS_ROOT/features/support 以下に保存すれば問題なさそうです。
http://efreedom.com/Question/1-3399156/Using-Cucumber-Capybara-Rails-Set-Custom-User-Agent-String