Railsのテスト環境の定番といえば
- Rspec
- Guard
- FactoryGirl
- Spork
このへんの組み合わせが定番だったんではないでしょうか。
Sporkでテスト環境をプリロードして、Guardでファイルを監視してガンガンテストを回してと。
今回はこのSporkを最近メキメキと頭角を現してきているSpringに置き換えて
よりモダンな高速テスト環境の作り方を説明します。
Springのいいところ
このSpringなにがいいって、設定がすごく簡単。
おまけにGuard+Rspec以外にもrails generateやrake routesなど他のコマンドも高速化してくれます。
一度体験したらもう戻れません。
必要なGem
- rspec-rails
- guard-rspec
- factory_girl_rails
- spring
Gemfile
group :development, :test do
gem 'rspec-rails'
gem 'guard-rspec'
gem 'factory_girl_rails'
gem 'spring' # これを新しく追加
end
spec_helperの設定
基本的にいつもどおり。
FactoryGirlを使用する場合は、この記述がないとfactoryの変更が反映されません。
spec_helper.rb
config.before(:all) do
FactoryGirl.reload
end
参考までに全文掲載。
spec_helper.rb
require File.expand_path('../../config/environment', __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'factory_girl'
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
RSpec.configure do |config|
config.use_transactional_fixtures = true
config.infer_base_class_for_anonymous_controllers = false
config.order = 'random'
config.include FactoryGirl::Syntax::Methods
config.before(:all) do
FactoryGirl.reload # これがないとfactoryの変更が反映されません
end
end
Guardの設定
これもほとんど今まで通りでOKです。
変更箇所は、下の一行目のspring: trueの部分だけ。
Guardfile
guard :rspec, spring: true do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { 'spec' }
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
watch(%r{^spec/factories/(.+)\.rb$}) { 'spec/factories_spec.rb' }
watch(%r{^spec/support/(.+)\.rb$}) { 'spec' }
watch('config/routes.rb') { 'spec/routing' }
watch('app/controllers/application_controller.rb') { 'spec/controllers' }
end
それでは実行
bundle exec guard
よきテストライフを!
おまけ
途中で触れたように、このへんのコマンドも高速に実行できます。
bundle exec spring rails g model Hoge
bundle exec spring rake routes
さらにおまけ
Rails4っぽくbinstubつくっておくと、より便利
bundle binstub spring
./bin/spring xxx
弊社ブログ記事からの転載です
Rails4時代の高速テスト環境 Rspec+Guard+FactoryGirl+Spring[NEW!] @ heathrow.lab