はじめに
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をインストールしてあれば使える。
#gem 'spring-commands-rspec' #テストの速度アップ
#gem 'rb-fsevent' #macのみ
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フォルダを作りその中に配置したほうがいいでしょう。
詳しい使い方はドキュメントを見てください。
poltergeist
poltergeistを導入するとcapybaraでJavaScriptを有効にした状態でテストを可能にできます。
spec/rails_helper.rbに以下を追加。
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
使い方は、js: true を付け加えると使えるようになります。
#例
describe 'いろいろPost操作' do
it '投稿とか', js: true do
#テスト
end
end
database_cleaner
database_cleanerはテスト後に作成されたデータを削除するためdatabase_cleanerをインストールします。
spec/rails_helper.rbに以下を追加します。
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
spec/rails_helper.rbの"config.use_transactional_fixtures"をtrueからfalseに変えてください。
config.use_transactional_fixtures = false
これで自動的に、データベースがクリーンに維持されるようになります。
guard-rspec
guardを使えば、ファイルが変更されたのを感知して自動でテスト実行できます。
$ guard init rspec
で使えるようになります。
使い方は、
$ bin/bundle exec guard
で使えます。
その他便利なgem
guard-livereload
viewを変更すると、自動的にブラウザを更新できる。すごく便利。
$ guard init livereload
でインストール完了。
ブラウザ側にはlivereload.comから拡張機能をインストールしてきて、localhost:3000のページ上で拡張してブラウザに追加されたボタンを押せばシンクロされる。
aunchy
テストコード内に、
save_and_open_page
を入れておけば、その時点のページをブラウザで開くことができる。デバッグに使う。
growl
自分のPCにgrowlというアプリケーションが入っていれば、使用できます。
guardのテストが完了すると、画面上に通知が表示されるようになりテストが捗ります。
spring-commands-rspec
rspecをspring経由で実行すると速度が約半分になるので、導入するのをおすすめする。spring-commands-rspecはspringが入っていることが前提となるので入っていない場合はgemfileにspringを追加する。以下のコマンドでspring経由でrspecを実行できるようにする。
spring binstub --allrspecを実行
spring rspec
guardと一緒に使用する場合は、Guardfileを以下のように少し変更する。
#####cmd: "bundle exec rspec"を以下のように変更する。 guard :rspec, cmd: "spring rspec" do #####