あなたはsh
でシェルコマンドを呼び出しています。 Rubyはそれがテストであることを知りません。 さらに、sh
は、障害が発生した場合に停止するようです。
2つのことを行う必要があります。エラーをキャッチし、通話の結果を確認します。
例:
require 'rake'
$summary = Hash.new(0)
def mytest(name, cmd)
$summary['test'] += 1
sh cmd do |ok, res|
if ok
$summary['ok'] += 1
else
$summary['failure'] += 1
puts "#{cmd } failed"
end
end
end
namespace :test do
task :one do |tsk|
mytest(tsk.name, "dir")
end
task :two do |tsk|
mytest(tsk.name, "undefined_cmd")
end
task :summary do
p $summary
end
end
task :test => "test:one"
task :test => "test:two"
task :test => "test:summary"
sh
は失敗をキャッチするブロックと呼ばれています。ブロック内で結果を分析します(OKの場合はtrue、エラーが発生した場合はfalse)。結果はサマリーハッシュに追加されます。
コードを変更してコードを2つに分割することができますファイル:1つのファイル内のすべてのテストおよびすくいファイルはRake::TestTastを取得
あなたのテストファイルは次のようになります。終了コードを使用してテストフィニッシュ場合
gem 'test-unit'
require 'test/unit'
class MyTest < Test::Unit::TestCase
def test_one
assert_nothing_raised{
basedir = Rails.root.join("test", "client")
res = system("cd #{basedir} && phantomjs lib/run-qunit.js index.html")
assert_true(res)
}
end
def test_two
assert_nothing_raised{
res = `dir` #Test with windows
assert_match(/C:/, res) #We are in c:
}
end
end
これは、のみ動作しますおそらく、あなた代わりに``
を使用し、詳細な分析のためにテストの出力を取得することができます
私はRailsに慣れていないので、何かを誤解するかもしれません。しかし、私はあなたの仕事でテストを参照してください。あなたはタスクを定義しますが、テストはありません。シェルコマンドの呼び出しだけです。 Webアプリケーションをテストする場合は、watirを参照する必要があります。 – knut
テストは純粋なJavaScriptで行われ、index.htmlから(SCRIPTタグを介して)参照されます。 – AnC