catches spec failed exception again

This commit is contained in:
Mike Gaffney 2009-06-03 18:49:32 -05:00
parent abac2023bc
commit 977f643dca
2 changed files with 102 additions and 60 deletions

View File

@ -150,8 +150,8 @@ module Webrat
begin begin
value = yield value = yield
rescue ::Selenium::CommandError, Webrat::WebratError rescue Exception => e
value = nil raise e unless yieldable_exceptions.include?(e.class)
end end
return value if value return value if value
@ -183,9 +183,18 @@ module Webrat
$browser.capture_screenshot(filename) $browser.capture_screenshot(filename)
end end
open_in_browser(filename) open_in_browser(filename)
end
def yieldable_exceptions
return [::Selenium::CommandError, Webrat::WebratError] unless lib_defined?(::Spec::Expectations::ExpectationNotMetError)
[::Spec::Expectations::ExpectationNotMetError, ::Selenium::CommandError, Webrat::WebratError]
end end
protected protected
def lib_defined?(library)
defined?(library)
end
def setup #:nodoc: def setup #:nodoc:
Webrat::Selenium::SeleniumRCServer.boot Webrat::Selenium::SeleniumRCServer.boot

View File

@ -0,0 +1,33 @@
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require "webrat/selenium/silence_stream"
require "webrat/selenium/selenium_session"
describe Webrat::SeleniumSession do
before :each do
Webrat.configuration.mode = :selenium
@selenium = Webrat::SeleniumSession.new()
end
it "should provide a list yieldable exceptions without spec if spec isn't defined" do
@selenium.should_receive(:lib_defined?).with(::Spec::Expectations::ExpectationNotMetError).and_return(false)
@selenium.yieldable_exceptions.should == [::Selenium::CommandError, Webrat::WebratError]
end
it "should provide a list yieldable exceptions with rspec" do
@selenium.should_receive(:lib_defined?).with(::Spec::Expectations::ExpectationNotMetError).and_return(true)
@selenium.yieldable_exceptions.should == [::Spec::Expectations::ExpectationNotMetError, ::Selenium::CommandError, Webrat::WebratError]
end
it "should handle yieldable exceptions in the wait_for" do
begin
@selenium.wait_for(:timeout => 0.25) do
raise Webrat::WebratError.new
end
fail("didn't throw")
rescue Webrat::TimeoutError
end
end
end