Ruby: блок восстановления не работает должным образом
Ниже begin-rescue
блокировать в hooks.rb
не работает должным образом. Когда есть доступный каталог результатов, он отправляется rescue
блок и когда это не так идет begin
блок. Звучит смешно, но это то, что происходит.
Теперь, когда я использую то же самое begin-rescue
в отдельном файле ruby он работает как шарм. Запускается begin
когда каталог доступен и работает rescue
когда это не так.
Расскажите о каталоге "results", который появляется после завершения теста автоматически, потому что я использую pretty_face
драгоценный камень. Он имеет несколько подкаталогов, таких как "изображения" и "таблицы стилей".
hooks.rb
require 'fileutils'
def delete_results
FileUtils.remove_dir(File.join(File.absolute_path('../..', File.dirname(__FILE__)),"results"))
end
Before do
begin
delete_results
rescue
puts "cant delete results dir or it doesnt exist"
end
end
Я также попробовал это в отдельном файле ruby, который всегда работает:delete_dir.rb
require 'fileutils'
begin
FileUtils.remove_dir(File.join(File.absolute_path('../..', File.dirname(__FILE__)),"results"))
rescue
puts "cant delete results dir or it doesnt exist"
end
Ошибка, когда каталог существует, но begin
блок в hooks.rb не работает
File exists - results\images (Errno::EEXIST)
C:/Ruby193/lib/ruby/1.9.1/fileutils.rb:247:in `mkdir'
C:/Ruby193/lib/ruby/1.9.1/fileutils.rb:247:in `fu_mkdir'
C:/Ruby193/lib/ruby/1.9.1/fileutils.rb:221:in `block (2 levels) in mkdir_p'
C:/Ruby193/lib/ruby/1.9.1/fileutils.rb:219:in `reverse_each'
C:/Ruby193/lib/ruby/1.9.1/fileutils.rb:219:in `block in mkdir_p'
C:/Ruby193/lib/ruby/1.9.1/fileutils.rb:205:in `each'
C:/Ruby193/lib/ruby/1.9.1/fileutils.rb:205:in `mkdir_p'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/pretty_face-0.10.3/lib/pretty_face/formatter/html.rb:188:in `make_directory'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/pretty_face-0.10.3/lib/pretty_face/formatter/html.rb:182:in `make_output_directories'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/pretty_face-0.10.3/lib/pretty_face/formatter/html.rb:63:in `before_features'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:181:in `block in send_to_all'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:179:in `each'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:179:in `send_to_all'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:169:in `broadcast'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:20:in `visit_features'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.3.17/lib/cucumber/runtime.rb:49:in `run!'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.3.17/lib/cucumber/cli/main.rb:47:in `execute!'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/cucumber-1.3.17/bin/cucumber:13:in `<top (required)>'
C:/Ruby193/bin/cucumber:23:in `load'
C:/Ruby193/bin/cucumber:23:in `<top (required)>'
-e:1:in `load'
-e:1:in `<main>'
Process finished with exit code 1
Empty test suite.
Ошибка возникает из-за того, что по какой-то причине (которую я не знаю) она не может удалить каталог, потому что подкаталог "images" и "stylesheets" присутствовал в директории "results". Поэтому я удалил их вручную, чтобы begin
блокировать работу. Теперь выше ошибки нет, и она пропускает begin
блок и идет в rescue
заблокировать и вывести "невозможно удалить результаты dir или он не существует", хотя "результаты" dir есть.