Ruby on Rails で Rspec+Capybara+Spork+Guard+factory_girl+simplecov 環境を構築するときのメモ


## rails new appname -T ではじめる

TEST:Unit 関連が生成されなくなる

## Gemfileに必要gemを追記

```
gem 'twitter-bootstrap-rails'

group :development, :test do
  gem 'rspec-rails'
  gem 'capybara'
  gem "jasmine-rails"
  gem "factory_girl_rails"
  gem 'spork'
  gem 'growl'
  gem 'guard'
  gem 'guard-bundler'
  gem 'guard-rspec'
  gem 'guard-spork'
  gem 'rb-fsevent',require: false
  gem 'simplecov'
  gem 'simplecov-rcov'
end
```

```
$ bundle install
```

## rpsecの準備

```
$ rails g rspec:install
```

```
create  .rspec
create  spec
create  spec/spec_helper.rb
```

## sporkの準備

```
$ spork --bootstrap
```

## spec/spec_helper.rb を編集してもろもろ準備

### 関連内容
capybara,spork,simplecov

```spec/spec_helper.rb
# step.1
# 約50行目の
# This file is copied to spec/ when you run 'rails generate rspec:install'
# より下のコード(sporkをインストールする前のspec_helper.rbのコード)をすべて
Spork.prefork do
# --ここ--
end
# に貼り付ける。

# step.2
# Spork.prefork do 内先頭付近に、factory_girlとcapybaraの設定追加。
# これでrails g の時にいろいろ勝手に作ってくれる
require 'rspec/rails'
require 'rspec/autorun'
require 'factory_girl_rails' # add
require 'capybara/rspec' # add

# step.3
# Spork.each_run do へFactoryGirl.reloadを追記して、factory_girl(テストデータ)関連のファイルが更新された際に読み込みようにする
Spork.each_run do
  FactoryGirl.reload
end

# step.4
# カバレッジのための設定を追記

# Spork.prefork do の直下に追記
Spork.prefork do
  unless ENV['DRB']
    require 'simplecov'
  end

# Spork.each_run do の直下に追記
Spork.each_run do
  if ENV['DRB']
    require 'simplecov'
  end
```

## aplicationのrootに.simplecovファイルを作成

```.simplecov
SimpleCov.start 'rails' do
  add_filter "/spec/"
end
```

## .rspecファイルの編集

```.rspec
--color
--drb
--format documentation # rspecの出力をドキュメント形式にする。お好みで。
```

## guardの設定

Guardfileの生成

```
$ bundle exec guard init spork
$ bundle exec guard init rspec
```

Guardfileを少々修正

```Guardfile
# guard 'rspec', :version => 2 do を以下のように修正
guard 'rspec', :version => 2, cli: '--drb', all_after_pass: false, all_on_start: false do
```

# 起動実験

scaffoldでもして、自動でファイル生成されているかを確かめる

### scaffold

```
$ rails g scaffold user name:string email:string

      invoke  active_record
      create    db/migrate/20120910022400_create_users.rb
      create    app/models/user.rb
      # factory_girl関連の自動生成を確認↓
      invoke    rspec
      create      spec/models/user_spec.rb
      invoke      factory_girl
      create        spec/factories/users.rb
      invoke  resource_route
       route    resources :users
      invoke  scaffold_controller
      create    app/controllers/users_controller.rb
      invoke    erb
      create      app/views/users
      create      app/views/users/index.html.erb
      create      app/views/users/edit.html.erb
      create      app/views/users/show.html.erb
      create      app/views/users/new.html.erb
      create      app/views/users/_form.html.erb
      invoke    rspec
      create      spec/controllers/users_controller_spec.rb
      create      spec/views/users/edit.html.erb_spec.rb
      create      spec/views/users/index.html.erb_spec.rb
      create      spec/views/users/new.html.erb_spec.rb
      create      spec/views/users/show.html.erb_spec.rb
      create      spec/routing/users_routing_spec.rb

      # capybara関連の自動生成を確認↓
      invoke      rspec
      create        spec/requests/users_spec.rb
      invoke    helper
      create      app/helpers/users_helper.rb
      invoke      rspec
      create        spec/helpers/users_helper_spec.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/users.js.coffee
      invoke    scss
      create      app/assets/stylesheets/users.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss
```

### マイグレーションの実行

```
$ rake db:create
$ rake db:migrate RAILS_ENV=test
```

### guardの実行
```
bundle exec guard
```

適当にファイルを編集してみて、自動的に更新されテストが実行されたら成功
カバレッジの結果は/coverage/index.htmlとして出力されているはず。

## 参考サイト・URL

- [Qiita:Rails3.2+RSpec2+Spork+GuardでTDD環境を構築しよう！](http://qiita.com/items/7b98fb8ec493ff801029)
- [Qiita:RSpec, Capybara, factory_girl, Spork, GuardでGrowlなRailsテスト環境を作る](http://qiita.com/items/6c6e00691be247e6fcd2)
- [Qiita:Rails+RSpec+SporkにSimpleCovを導入](http://qiita.com/items/ae6eea7a9359ebffe170)
- [#詰んでる日記:最近やってるRailsプロジェクトのテスト方法](http://tohae.hatenablog.com/entry/20120204/1328383213)
- [naoty.to_s:rspec, factory_girl, spork, guardによる自動テスト環境の構築](http://naoty.hatenablog.com/entry/20110824/1314204524)