您正在通过sh
shell 命令调用。Ruby 不知道,这是一个测试。此外sh
似乎停止,如果发生故障。
你必须做两件事:捕捉错误并检查你的调用结果。
一个例子:
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
用块调用以捕获故障。在块内,我分析结果(正确表示为 true,如果脚本因错误停止,则为 false。结果将添加到摘要哈希中。
为了您的使用,您可以修改代码并将代码拆分为两个文件: 所有测试在一个文件中。并且 rake 文件得到一个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
仅当您的测试以退出代码结束时才有效。也许您可以``
改为使用并获取测试的输出以进行详细分析。