インストール
% ruby -v ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux] % rails -v Rails 3.2.7 % rvmsudo gem install rspec % rspec --version 2.11.1 % rvmsudo gem install cucumber % cucumber --version 1.2.1
Hello RSpec & Cucumber
hello/5/features/step_definitions/greeter_steps.rbの Thenの行は本だと
Then /^I should see "([^"]*)"$/ do | greeting | @message.should == greeting end
となっているけど、Cucumberを実行した時のエラー文に従って以下のようにしても動く。
Then /^I should see "(.*?)"$/ do | greeting | @message.should == greeting end
今のところさっぱり意味がわからない。
Code Breaker
大雑把には使い方がわかった。確かにスペックファイルが準備されている状況でリファクタリングするのは楽だ。
ただ、リファクタリングの基本思想などがわからないので、なぜそのコードのほうが良いのかがわからない。(式 ? 真のとき : 偽のとき) という書き方はあまり好きじゃないのだけど。
Part 2 ビヘイビア駆動開発(BDD)
さっぱりわからない。アジャイル開発が良いという説明の部分はわかるし、顧客からフィードバックを頻繁にもらうべきだというのもわかる。でも、BDDの本質がわからない。カタカナ語が盛りだくさんでさっぱりだ!
SMARTな結果というのは良い。
- Specific:何かが完了したことを知るのに十分な情報があることを意味する
- Measurable:目標が達成できたかどうかを定量的に判断できることを意味する
- Achievable:達成可能であることを意味する
- Relevant:目的に関係あること(現時点での目標において適切であること)を意味する。
- Timeboxed:目標が達成されていないときに、いつ時間切れになるかがわかることを意味する。
Part 3 RSpec
読み飛ばした。たぶん、使うようになってから読み返したほうが良い。
Part 4 Cucumber
Connextraフォーマットの説明は面白い。どういう役割・立場から、誰が何をするのか。そして、その理由は何かを明確にするための書式がconnextraフォーマットとのこと。
As a <role> I want <feature> So that <business value>
確かに学生にソフトウェアの要求分析させると非常に抽象的でコーディングにつながる要件を出さない(出せない)。これは使えるかも。
Part5 ビヘイビア駆動のRails
本のとおりだと、「WARNING: Cucumber-rails required outside of env.rb. The rest of loading is being defered until env.rb is called.」というwarningがでる。Cucumber-rails required outside of env.rb. The rest of loading is being defered until env.rb is calledを参考に追記。また、javascriptのライブラリがないのでgenerateコマンドを実行しようとするとエラーがでる。なので、execjsとtherubyracerをGemfileに追記。Cucumber実行時に database_cleaner というのも必要らしいので追記。
% rails new showtime % cd showtime % cp -p Gemfile Gemfile.org % vi Gemfile % diff Gemfile.org Gemfile 9a10,15 > group :development, :test do > gem "rspec-rails", ">= 2.0.0" > gem "cucumber-rails", ">= 0.3.2", :require => false > gem "database_cleaner" > gem "webrat", ">=0.7.2" > end 24c30,31 < --- > gem 'execjs' > gem 'therubyracer' % rvmsudo bundle install
RSpecとCucumberのファイルを生成。
% script/rails generate rspec:install create .rspec create spec create spec/spec_helper.rb % script/rails generate cucumber:install create config/cucumber.yml create script/cucumber chmod script/cucumber create features/step_definitions create features/support create features/support/env.rb exist lib/tasks create lib/tasks/cucumber.rake gsub config/database.yml gsub config/database.yml force config/database.yml
実行確認
% rake db:migrate % rake db:test:prepare % rake spec No examples matching ./spec{,/*/**}/*_spec.rb could be found % rake cucumber /usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby -S bundle exec cucumber --profile default Using the default profile... 0 scenarios 0 steps 0m0.000s
Webratすごい予感。
うっすらわかった気がするけど、これをどう使えば良いのかはまだはっきりしない。