rails+rspec+spring+guardでテストを実行してみる

Railsrspecを実行するときに実行時間を短くするための試みを昔

を使ってやっていました。

今回はsporkでなくspringを使ってみます。

Gemfileを以下のようにします。

group :test do
   gem 'rspec'
   gem 'rspec-rails'
   gem 'simplecov', require: false
   gem 'simplecov-rcov', require: false
   gem 'rubocop', require: false
   gem 'rubocop-checkstyle_formatter', require: false
   gem 'spring'   ##関係するのはここ
   gem 'guard-rspec'  ##関係するのはここ
   gem 'shoulda-matchers' 
 end

そうしたら、


bundle install
を実行します。
実行したら、続いて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

内容としては、アプリケーションの各コード(app以下のコードやconfig/router.rbなど)を変更した場合、それに該当するrspecのコードが実行されるというものです。
ここまで書いたらguardを起動してみましょう


bundle exec guard

デーモンが起動しますので、別ターミナルを開いてapp以下のファイルを試しに編集してみてください。
保存が完了すると自動的にテストが実行されます。しかも割と素早く。

以上です。