LoginSignup
21
22

More than 5 years have passed since last update.

cucumber + spork + guard + factory_girl

Last updated at Posted at 2012-08-27

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 を参照して作った

21
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22