Railsのテスト関連。インストール方法まとめ 便利なgemあり

[!注意!]最新版はこちらに書いています。

http://www.sahara-ja.com/posts/3

はじめ

 RailsでテストをしようとするとRSpec系を使うのが主流だと思うので、そのインストール方法をまとめます。
 基本的には、RSpec+Capybara+factory_girlを使います。
 最後の方に便利なgemを書いてます。

使う

まずはgemfileに追加。

group :development, :test do
  #test
  gem 'rspec-rails', '~> 3.0'
  gem 'capybara'
  gem 'factory_girl_rails'
  gem 'database_cleaner'
  gem 'guard-rspec'
  #以下便利gem。使う場合はコメント外す。
  #gem 'guard-livereload'
  #gem 'launchy' #save_and_open_page methodが使える。
  #gem 'growl' #テスト通知。growlをインストールしてあれば使える。
end

追加してbundle install。

rspec-rails

$ bin/rails generate rspec:install

でspecフォルダと中身を作ります。
これでrspecは使えるようになります。
テストを作る時、ファイル名を*_spec.rbとすることを忘れないようにします。

capybara

spec/rails_helper.rbに以下を追加。

require 'capybara/rails'

作成するテストファイルは上同様ファイル名を*_spec.rbにし、先頭に以下を付け加える。

require 'rails_helper'

factory_girl_rails

factory_girlはテストで使用する生成するデータを簡単に管理できます。

spec/rails_helper.rbに以下を追加します。

RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods
end

作成するデータをspec/factories/*.rbに配置すれば自動的に読み込んでくれるのでfactoriesフォルダを作りその中に配置したほうがいいでしょう。

詳しい使い方は以下を見てください。
File: GETTING_STARTED — Documentation for factory_girl (4.5.0)

database_cleaner

database_cleanerはテスト後に作成されたデータを削除するためdatabase_cleanerをインストールします。

spec/rails_helper.rbに以下を追加します。

  #db_cleaner
  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

これで自動的に、データベースがクリーンに維持されるようになります。

guard-rspec

guardを使えば、ファイルが変更されたのを感知して自動でテスト実行できます。

$ guard init rspec

で使えるようになります。

使い方は、

$ bin/bundle exec guard

で使えます。


その他便利なgem

guard-livereload

github.com
 viewを変更すると、自動的にブラウザを更新できる。すごく便利。

$ guard init livereload

でインストール完了。

ブラウザ側には
How do I install and use the browser extensions?
から拡張機能をインストールしてきて、localhost:3000のページ上で拡張してブラウザに追加されたボタンを押せばシンクロされる。

launchy

github.com
 テストコード内に、

save_and_open_page

を入れておけば、その時点のページをブラウザで開くことができる。デバッグに使う。

growl

 自分のPCにgrowlというアプリケーションが入っていれば、使用できます。
guardのテストが完了すると、画面上に通知が表示されるようになりテストが捗ります。

まとめ

 guard-livereloadなんかは最近知って、すごく便利だなと思いました。
ブラウザとシンクロさせるやり方は他にもたくさんありいろいろ試してみましたが、この方法が1番シンプルで使いやすいと思います。