• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/132

Railsじゃない場合のやり方はsecondlifeさんのこちらの記事に書かれていますが、Railsでlibディレクトリ以下のファイルをautotestする場合には、さらにもう一ひねりしないといけないので、その方法を紹介します。

先に結論だけ書いておくと、RAILS_ROOT/.autotestに以下のように記述すればOK.

Autotest.add_hook :run do |autotest|
  class RailsAutotest < Autotest
    alias __tests_for_file tests_for_file
    def tests_for_file(filename)
      case filename
      when /^lib\/.*\.rb$/ then
        impl = File.basename(filename).gsub '_', '_?'
        impl.sub!(/\.rb$/, '_test.rb')
        @files.keys.select do |k|
          k =~ %r%^test/lib/#{ impl }$%
        end
      when /^test\/.*_test\.rb$/ then
        [filename]
      else
        __tests_for_file(filename)
      end
    end
  end
end
使い方は、lib/foo_bar.rb のテストをtest/lib/foo_bar_test.rbに書けばOK。 あとは普通にRailsでautotestを使うときとおんなじです。

autotestは、config/environment.rbの有無によって自動的にRailsアプリケーション であるかどうかを判別します。その場合、通常のAutotestクラスではなく、Autotestクラスから派生したRailsAutotestクラスが使われるので、こちらのクラスのtests_for_fileに手を加える必要があります。

また、わけありでconfig/environment.rbを削除しているような場合は、autotestの起動時に

$ autotest -rails
と、-railsオプションを指定することで明示的にRailsモードで起動できます。
関連記事
RailsのテストでRed Green Yellow
ZenTestのautotestがとても快適
Railsでデバッグをする7つの方法

<追記>

lib以下のファイルをテストするためのRakeタスク:

require 'rake'
require 'rake/testtask'

namespace :test do
  desc 'Test libs.'
  Rake::TestTask.new(:libs) do |t|
    t.pattern = File.join(RAILS_ROOT, 'test/lib/**/*_test.rb')
    t.verbose = true
  end
end

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/132

posted by Png genki on Tue 21 Nov 2006 at 14:29

Comments:

or Preview
Social Bookmarks
  • Delicious
  • B_entry80
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ