web-dev-qa-db-ja.com

Ruby Rakeを使用した単体テストの実行

実行中の単体テストを自動化するために、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ディレクトリを見つけることができません。

33
kmikael

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
62
DNNX

問題は、libディレクトリがRubyのロードパスに含まれていないことです。あなたはそれをそのように修正することができます:

$:.unshift 'lib'
require 'test_entry'

libディレクトリの拡張パスをロードパスに追加する、より信頼性の高い代替手段:

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

ところで、グローバル変数$:にはより詳細なエイリアスがあります$LOAD_PATH

3
KL-7