実行中の単体テストを自動化するために、Rakeビルドツールを使用して調査していました。私はウェブを検索しましたが、すべての例はRailsを使用するためのものでした。私は通常、小さなコマンドラインプログラムまたは単純なSinatraアプリケーションを作成します。
そこで、コマンドラインで実行することを単にエミュレートする次の(おそらく悪い)ソリューションを考え出しました(例として、1つの単体テストを実行しただけです)。
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
ディレクトリを見つけることができません。
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
問題は、lib
ディレクトリがRubyのロードパスに含まれていないことです。あなたはそれをそのように修正することができます:
$:.unshift 'lib'
require 'test_entry'
lib
ディレクトリの拡張パスをロードパスに追加する、より信頼性の高い代替手段:
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
require 'test_entry'
ところで、グローバル変数$:
にはより詳細なエイリアスがあります$LOAD_PATH
。