blog
これから始める Ruby on Rails シリーズRuby on Rails:Guardを使ったテストの自動化
この記事は書かれてから1年以上経過しており、内容が古い場合があります。
はじめに
前回の記事Ruby on Rails:埋め込みRubyを使った簡単な動的ページを作るで埋め込みRubyとそれに合わせたテストを試しました。今回は前回のテストをもとに、Guardを使ってテストを自動化してみます。詳しい内容はRuby on Rails チュートリアルの第3章(3.6.2)を参考にしています。この記事では実行結果のみを掲載します。
Guardとは
guard-rspecはspecファイルに変更があった際、自動でテストを実行します。Gruntで言うgrunt-contribe-watchのようなものですね。
Guardのインストール
Gemfile
にGuardをインストールするよう$ vi Gemfile
で下記のように追記します。
group :development, :test do
gem 'rspec-rails'
gem 'guard-rspec'
end
group :test do
gem 'capybara'
end
追記できたら$ bundle install
でインスト−ル。エラーが起きたら$ bundle update
しておきます。
Guardの設定
インストールが完了したらrspecで使えるよう初期化します。
$ guard init rspec
00:32:47 - INFO - Writing new Guardfile to /Users/ryuichi/Projects/Labs/step6.guard.rails/Guardfile
00:32:47 - INFO - rspec guard added to Guardfile, feel free to edit it
Guardfileへの追記
先頭に下記を追記 ruby require 'active_support/inflector'
デフォルトにあるものとRuby on Railsチュートリアルにある指定のどちらかなのか両方なのか理解できず、とりあえず最後尾に追記します。
guard 'rspec', all_after_pass: false do
# Custom Rails Tutorial specs
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) do |m|
["spec/routing/#{m[1]}_routing_spec.rb",
"spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb",
"spec/acceptance/#{m[1]}_spec.rb",
(m[1][/_pages/] ? "spec/requests/#{m[1]}_spec.rb" :
"spec/requests/#{m[1].singularize}_pages_spec.rb")]
end
watch(%r{^app/views/(.+)/}) do |m|
(m[1][/_pages/] ? "spec/requests/#{m[1]}_spec.rb" :
"spec/requests/#{m[1].singularize}_pages_spec.rb")
end
watch(%r{^app/controllers/sessions_controller\.rb$}) do |m|
"spec/requests/authentication_pages_spec.rb"
end
end
これで準備完了です。
変更の監視と自動テスト
Guardを実行してみます。
$ guard
00:38:38 - INFO - Guard is using TerminalTitle to send notifications.
00:38:38 - INFO - Guard::RSpec is running
00:38:38 - INFO - Guard::RSpec is running
00:38:38 - INFO - Guard is now watching at '/Users/ryuichi/Projects/Labs/step6.guard.rails'
now watching
になったら成功です。
specを変更する
この状態でspecファイルを変更すると自動でテストが実行されます。
テストが自動で行われるか見てみてください。
終了する
監視を終了するには下記のようにexit
を入力します。
[1] guard(main)> exit
以上、Guardを使った自動テストに関するメモでした。