blog

これから始める Ruby on Rails シリーズRuby on Rails:Guardを使ったテストの自動化

    • Ryuichi Nonaka
    この記事は書かれてから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を使った自動テストに関するメモでした。

    シリーズ

    1. Ruby on Railsの最初の一歩
    2. Ruby on RailsアプリをHerokuにデプロイしてみる
    3. $ bundle exec を省略する
    4. Ruby on Railsで静的ページを作る
    5. Ruby on Rails:RSpecとCapybaraで初めてのインテグレーションテスト
    6. Ruby on Rails:埋め込みRubyを使った簡単な動的ページを作る
    7. Ruby on Rails:Guardを使ったテストの自動化

    コメント・フィードバック