我是Rake的新手。
我正在编写一系列测试来验证存储在YAML文件中的数据。每个测试都是一个单独的rake任务。
我的问题是:我希望在多次测试失败的情况下最后提出一个例外。
这似乎是一个简单的问题,但我害怕经过大量的谷歌搜索,我找不到一个干净的方法去做。
一种解决方案可能是使用多个begin,rescue block和一个全局变量?
status = 0
desc 'task 1'
task :task_1 do
begin
raise if something_is_bad
rescue
puts "something is bad"
status += 1
end
end
desc 'task 2'
task :task_2 do
begin
raise if something_else_is_bad
rescue
puts "something else is bad"
status += 1
end
end
desc 'default task'
task :default do
Rake::Task['task_1'].execute
Rake::Task['task_2'].execute
if status
raise "There were errors"
end
end
这似乎导致重复开始,救援。
另一种解决方案可能是使用错误处理方法吗?
status = 0
def handle_failure(status, message)
status += 1
puts message
end
desc 'task 1'
task :task_1 do
handle_failure(status, "something is bad") if something_is_bad
end
desc 'task 2'
task :task_2 do
handle_failure(status, "something else is bad") if something_else_is_bad
end
desc 'default task'
task :default do
Rake::Task['task_1'].execute
Rake::Task['task_2'].execute
if status
raise "There were errors"
end
end
我仍然觉得必须有更好的方法吗?
答案 0 :(得分:1)
根据您的要求,这大致是我会如何处理的。
desc 'task 1'
task :task_1 do
if something_is_bad
puts "something is bad"
raise
end
end
task :default do
failed = false
%W(task_1 task_2).each do |task|
begin
Rake::Task[task].execute
rescue
failed = true
end
end
puts "One of the tasks failed!" if failed
end