From 866c975076f92b5d064ee8998be638dd213f0724 Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Mon, 27 Feb 2017 11:06:48 -0800 Subject: [PATCH] Only reset the server error if there was an error to raise - fix race condition --- lib/capybara/session.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/capybara/session.rb b/lib/capybara/session.rb index 9820cfed..68a60983 100644 --- a/lib/capybara/session.rb +++ b/lib/capybara/session.rb @@ -123,17 +123,19 @@ module Capybara # Raise errors encountered in the server # def raise_server_error! - if Capybara.raise_server_errors and @server and @server.error + if @server and @server.error # Force an explanation for the error being raised as the exception cause begin - raise CapybaraError, "Your application server raised an error - It has been raised in your test code because Capybara.raise_server_errors == true" + if Capybara.raise_server_errors + raise CapybaraError, "Your application server raised an error - It has been raised in your test code because Capybara.raise_server_errors == true" + end rescue CapybaraError #needed to get the cause set correctly in JRuby -- otherwise we could just do raise @server.error raise @server.error, @server.error.message, @server.error.backtrace + ensure + @server.reset_error! end end - ensure - @server.reset_error! if @server end ##