rails+rspec+spring+guardでテストを実行してみる
Railsでrspecを実行するときに実行時間を短くするための試みを昔
- rspec
- guard
- spork
を使ってやっていました。
今回は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以下のファイルを試しに編集してみてください。
保存が完了すると自動的にテストが実行されます。しかも割と素早く。
以上です。