はじめに
RailsじゃないRspec3環境を構築する方法 という記事でRailsじゃないプロジェクトでrspec3を導入する方法が紹介されています。
このページを参考にしてrspecをスムーズに導入できましたが、しばらく作業していたら次はrspecコマンドを実行するのが面倒になってきました。
guardを導入してファイルが更新されたタイミングで自動的にテストが走るように設定したので、その方法をメモします。
前提
元記事 と同じ環境を前提としています。
つまりbundlerでgemの管理をして、rspec3以上を導入して、bundle exec rspec
でテストが動くような状態です。
ファイル構成は以下のとおりです。
rspec_test
├── Gemfile
├── Gemfile.lock
├── lib
│ └── hello.rb
└── spec
├── hello_spec.rb
└── spec_helper.rb
手順
1. guard-rspecを導入
guard-rspec というgemを導入します。
# A sample Gemfile
source "https://rubygems.org"
gem 'rspec', '>= 3.0.0'
+ gem 'guard-rspec', require: false
2. Guardfile を生成
guard init rspec
を実行します。Guardfileが作られます。
3. Guardfile を編集
Guardfileを以下のように編集します。
guard :rspec, cmd: 'bundle exec rspec' do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" }
end
例えば、hello.rbが変更された場合、bundle exec rspec hello_spec.rb
が実行されます。
cmd
というオプションで実際に実行するコマンドを指定します。bundler経由でrspec
を実行しているので bundle exec rspec
と指定する必要があります。
4. 実行
ターミナルで bundle exec guard
を実行するとファイル監視が始まります。Ctrl-Dで終了できます。
5. (おまけ) 通知を表示する
実行後にMac OSXの通知センターを使って結果を表示するには terminal-notifier-guard を使います。(Mac以外の人は他の通知gem用を使ってください。)
- terminal notifierをインストール
brew install terminal-notifier
- Gemfileにterminal-notifier-guardを追加して、guardを再起動。
# A sample Gemfile
source "https://rubygems.org"
gem 'rspec', '>= 3.0.0'
gem 'guard-rspec', require: false
+ gem 'terminal-notifier-guard', '~> 1.6.1'