我正按照说明here尝试将puffing-billy添加到Rails应用程序中。
运行测试套件会引发:
in `require': cannot load such file -- capybara/webkit (LoadError)
我使用的是Poltergeist而非Webkit,因此不需要加载此文件。
错误源自puffing-billy中的以下行
# /lib/billy/browsers/capybara.rb
DRIVERS = {
poltergeist: 'capybara/poltergeist',
webkit: 'capybara/webkit',
selenium: 'selenium/webdriver'
}
def self.register_drivers
DRIVERS.each do |name, driver|
require driver rescue next # this line should be rescued
send("register_#{name}_driver")
end
end
什么可以阻止require driver
被拯救并导致此错误,以及调试此问题的方法是什么?
答案 0 :(得分:0)
一般来说,在Ruby中使用内联救援是一个坏主意(救援工作在最后)。这是一篇很好的文章,有更多细节:https://www.new-bamboo.co.uk/blog/2015/09/23/dont-inline-rescue-in-ruby/
内联救援和未经过滤的" rescue(没有指定你想要捕获的错误类型)捕获任何从StandardError
LoadError
继承的异常是而不是 StandardError
的后代所以它&#39 ; s不会被你的内联救援抓住。
这是Ruby中的错误层次结构图表: http://blog.honeybadger.io/understanding-the-ruby-exception-hierarchy/
所以这里修改了你的代码,以便它可以工作,也不会发现无意的错误:
DRIVERS.each do |name, driver|
begin
require driver
send("register_#{name}_driver")
rescue LoadError
# This skips to the next driver
# It would be nice to add logging here to notify that the driver was skipped
end
end