【发布时间】:2012-03-02 19:37:36
【问题描述】:
我正在根据 Rakefile 中的现有测试文件动态生成测试任务。假设您有各种以模式test_<name>.rb 命名的单元测试文件。所以我正在做的是创建一个以“test”命名空间内的文件名命名的任务。
使用下面的代码,我可以使用 rake test:<name> 调用所有测试
require 'rake/testtask'
task :default => 'test:all'
namespace :test do
desc "Run all tests"
Rake::TestTask.new(:all) do |t|
t.test_files = FileList['test_*.rb']
end
FileList['test_*.rb'].each do |task|
name = task.gsub(/test_|\.rb\z/, '')
desc "Run #{name} tests"
Rake::TestTask.new(:"#{name}") do |t|
t.pattern = task
end
end
end
上面的代码有效,只是对于简单的任务生成来说代码似乎太多了。
而且我还没有想出一种将一些描述文本打印到控制台的方法,例如puts "Running #{name} tests:"
还有比上述方法更优雅的方法吗?
编辑: 我真正期望得到的是一个替代循环来动态定义任务,但我猜 rake 库没有提供任何帮助,所以我坚持循环。
【问题讨论】:
-
从@ScottJShea 的提示中编辑了代码
-
对于那些不知道的人,Jim Weirich 是 Rake 项目的作者,我感谢他在下面回答我的问题。