2012-01-26 9 views
31

Rakeビルドツールを使用して、ユニットテストの実行を自動化する方法を調べていました。私はウェブを検索しましたが、すべての例はレールを使用するためのものでした。私は通常、小さなコマンドラインプログラムやシンプルなSinatraアプリケーションを作成します。RakeによるRubyユニットテストの実行

だから私はちょうど私がコマンドラインでどうなるのかエミュレートし、次の(おそらく悪い)ソリューションを思い付いた:(。私はただ一例として一つのユニットテストを実行した)

desc 'Run unit tests' 
task :test do 
    sh 'ruby -I lib test/test_entry.rb' 
end 
task :default => :test 

それは動作します私はより良い方法が必要であると思うのを助けることができません、ちょうどrequire 'test/test_entry.rb'を書くことは動作しません。 requireの問題が発生すると、Rubyはすべてのファイルがあるlibディレクトリを見つけることができません。

答えて

60

Rake :: TestTask http://rake.rubyforge.org/classes/Rake/TestTask.htmlを使用してください。これをRakeファイルに入れてからrake test

require 'rake/testtask' 

Rake::TestTask.new do |t| 
    t.libs << "test" 
    t.test_files = FileList['test/test*.rb'] 
    t.verbose = true 
end 
+0

ありがとうございました。これはとてもうまくいった! – kmikael

+0

あなたのテストをサブディレクトリに整理するのが好きなら、そのために 'test/**/test * .rb''を試してください。 – tadman

2

問題は、libディレクトリがrubyのロードパスに含まれていないことです。グローバル変数$:は、より詳細なエイリアス$LOAD_PATHを持っている、ところで

$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'lib')) 
require 'test_entry' 

$:.unshift 'lib' 
require 'test_entry' 

以上の信頼性の高いロードパスにlibディレクトリの拡張されたパスを追加し、代替:あなたはそのようにそれを修正することができます。

+0

このヒントもありがとう。 – kmikael

関連する問題