Вот еще один способ решения проблемы с использованием правил в Rake.
Правило рейка срабатывает всякий раз, когда rake хочет построить «X», и находит правила, которые говорят «чтобы построить X, используйте Y»,Мы установим правило, которое срабатывает, когда кто-то указывает цель в формате «test: XXX», он пытается использовать файл с именем «test / test_XXX.rb».
require 'rake/testtask'
task :default => 'test:all'
TEST_FILES = FileList['test/test_*.rb']
namespace :test do
desc "Run all tests"
Rake::TestTask.new(:all) do |t|
t.test_files = TEST_FILES
end
rule /^test:/ => lambda { |tn| "test/test_%s.rb" % tn.gsub(/^test:/,'') } do |rule|
ruby rule.source
end
end
Предположим, у вас естьтестовый файл с именем "test / test_my_code.rb".Чтобы выполнить этот тестовый файл, просто введите:
rake test:my_code
Правило срабатывает всякий раз, когда существует цель, начинающаяся с «test:», которая не может быть сопоставлена ни с какой другой задачей.Затем он ищет файл, заданный функцией lamdba.Лямбда преобразует целевое имя «test: XXX» в имя файла «test / test_XXX.rb».Если имя файла существует, выполняется тело правила.
Тело правила просто запускает тестовый файл как исполняемый файл.Обычно этого достаточно для запуска тестов одного файла.Если вам нужно добавить пути к библиотекам (например, «lib») к пути загрузки для тестов, вы можете изменить тело правила на что-то вроде
ruby "-Ilib", rule.source
Еще одно различие между этим и явным решением цикла заключается вэтот rake не будет выводить описания правил, поэтому вывод "rake -T" не будет включать в себя отдельные тесты.
Я не знаю, лучше ли это, чем оригинал, ноэто дает вам несколько вариантов.