1 Gemfile
macの場合
Gemfile
group :test do
gem 'rspec-rails'
gem "cucumber-rails", "~> 1.0", require: false
gem 'database_cleaner'
gem 'spork'
gem 'capybara'
gem 'guard'
gem 'guard-spork'
gem 'guard-rspec'
gem 'guard-cucumber'
gem 'factory_girl_rails'
gem 'rb-fsevent'
gem 'growl'
end
- cucumber-railsのオプションをつけないとspork+cucumberでうまく動かない
- growlnotifyのインストールが必要
- growl 1.3以上が必要(無料の1.2では動かなかった)
ubuntu desktopの場合
Gemfile
group :test do
gem 'rspec-rails'
gem "cucumber-rails", "~> 1.0", require: false
gem 'database_cleaner'
gem 'spork'
gem 'capybara'
gem 'guard'
gem 'guard-spork'
gem 'guard-rspec'
gem 'guard-cucumber'
gem 'factory_girl_rails'
gem 'libnotify'
gem 'rb-inotify'
end
2 install
rails g rspec:install
rspec
rails g cucumber:install --spork
cucumber
spork --bootstrap
guard init spork
guard init cucumber
guard init rspec
3 Guardfile
notification :growl
を先頭に追加 #ubuntuの場合追加する必要なし
guard :spork
のグループを先頭に移動
:test_unit => false
を念のため追加
sporkの使用を明示
```ruby
guard 'cucumber',:cli => '--drb' do
guard 'rspec', :version => 2, :cli => '--drb' do
```
-
guard init
をするたびにGuardfileの後ろに設定が追記されていくので、設定がかぶっているとsporkサーバの再起動に失敗するエラーが出たりしやすくなる
4 FactoryGirl
rails g factory_girl:model Name [field:type field:type] [options] --dir=spec/factories
features/support/env.rb
Spork.prefork do
require 'cucumber/rails'
require 'factory_girl_rails'
require 'factory_girl_rails'
を適切なところに追加
4 start guard
guard start
5 サンプル
features/blog.feature
#language: ja
機能:Post投稿
背景:
前提 次の"post"レコードがある
|title|content|
|hello|world|
|こんにちは|世界!!!!!|
シナリオ:一覧表示
もし "/posts"ページを表示する
ならば "Hello"と表示されていること
かつ "こんにちは"と表示されていること
かつ "Edit"と表示されていること
かつ "Delete"と表示されていること
シナリオ:詳細表示
前提 "/posts"ページを表示している
もし "hello"リンクをクリックする
ならば "world"と表示されていること
かつ "世界!!!!!"と表示されていないこと
シナリオ:新規投稿する
前提 "/posts"ページを表示している
もし "New"リンクをクリックする
かつ "Title"に"ようこそ"と入力する
かつ "Content"に"Cucumber!"と入力する
かつ "登録する"ボタンをクリックする
ならば "/posts"ページを表示していること
かつ "記事を投稿しました"と表示されていること
かつ "ようこそ"と表示されていること
features/step_definitions/blog_steps.rb
#encoding: utf-8
前提 /^次の"(.*?)"レコードがある$/ do |factory, table|
table.hashes.each do |hash|
FactoryGirl.create(factory, hash)
end
end
前提 /^"(.*?)"ページを表示している$/ do |addr|
visit addr
end
もし /^"(.*?)"ページを表示する$/ do |addr|
visit addr
end
もし /^"(.*?)"に"(.*?)"と入力する$/ do |lbl, description|
fill_in lbl, with: description
end
もし /^"(.*?)"リンクをクリックする$/ do |link|
click_link link
end
もし /^"(.*?)"ボタンをクリックする$/ do |link|
click_button link
end
ならば /^"(.*?)"ページを表示していること$/ do |path|
current_path.should == path
end
ならば /^"(.*?)"と表示されていること$/ do |content|
page.has_content? content
end
ならば /^"(.*?)"と表示されていないこと$/ do |content|
page.has_no_content? content
end
*先頭の大文字・小文字、複数形でマッチせずはまりやすい
*stepファイルは https://github.com/jnicklas/capybara を参照して作った