Вы вызываете через sh
команду оболочки.Руби не знает, что это тест.Кроме того, 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 для ok, 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
Это работает только в том случае, если тест завершен с кодом завершения. Возможно, вы можете использовать ``
вместо этого и получить результаты теста для подробного анализа.