[Ruby on Rails]バッチ処理のrbをテストする方法

バッチ処理として書いたrbファイルをテストする場合

テストケース内で

[ruby]system("ruby バッチファイル")[/ruby]

としても良いが

たとえばTimecopで日付を固定してテストする場合には具合が良くない。

バッチのプロセスが別プロセスで動くため、Timecopの設定がバッチに反映されない。

なので

systemで呼び出している部分を

[ruby]load "バッチファイル"[/ruby]

というように、loadに変えると、そのバッチ処理が都度ロードされるので

テストを実行しているプロセス内でバッチファイルが実行される形になる。

[Ruby on Rails]Date.todayとかを使っている箇所をテストする方法

日時によって表示項目を制御したりする場合に、よくDate.todayとかDateTime.nowとかを使ったりすると思うが

このシステム日時を取得している場所のテストをうまく実行したい場合に役に立つプラグインが

Timecop

です。

ようは、Date.todayとかで返ってくる日時を固定してしまうというプラグイン。

インストールは

Rails2.*系であれば、config/environments/test.rbあたりに

[text]config.gem ‘timecop’, :version => ‘= 0.3.4′[/text]

を追加し、rake gems:installを実行

テストケースでは

たとえば、2011年10月04日に固定したい場合には

[ruby]Timecop.travel(Date.new(2011,10,4))[/ruby]

とすると、これ以降、Date.todayは2011年10月04日を返すようになる。

日付の固定を解除したい場合は

[ruby]Timecop.return[/ruby]

を実行する

rspec

デファクトスタンダードな、Railsのテストツール

ホームページ

公式

まだタグでv3.0.0正式対応のものがないようなので、bataを使う

インストール

Gemfileに

を追加して

実行

rspec用タスクを生成

使い方

  • テスト対象のファイルをとりあえず追加
  • scaffoldで作成したファイルに対してrspecのファイルを作成
  • マイグレーション実行
  • テスト実行
  • 以下のような実行結果がでるはず

    Startedの下にドット「.」が出るが、これは一つのテストケースを実行して正常に終了したという表示
    ここが「F」になれば、テストケースがエラーになったということ。
    *はペンディングなテストケース
  • 以下作成中

FactoryGirl

fixtureの代替となるツール

ホームページ

Github

インストール

Gemfileに

を追加して

実行

使い方

  • 定義
    specフォルダの下にfactoriesフォルダを作成
    このフォルダの中にrbファイルを作成し、そこにデータのひな形を作成する
    #spec/factories/users.rb 
  • ひな形を元にデータを作成
  • 連番の付いたデータを作成
    まず、factories/users.rbファイルに以下を追加
    #spec/factories/users.rb 

    ひな形の中のemailのデータ部分を以下に書き換え

    もしくは、直接以下のように書く
  • 以下作成中