Reset sessions on failed system test screenshot

Reset Capybara sessions if `take_failed_screenshot` raise exception
in system test `after_teardown`.
This commit is contained in:
Maxim Perepelitsa 2018-11-09 01:03:04 +07:00
parent 4fe27cdc15
commit 59895db44b
3 changed files with 37 additions and 2 deletions

@ -1,3 +1,10 @@
* Reset Capybara sessions if failed system test screenshot raising an exception.
Reset Capybara sessions if `take_failed_screenshot` raise exception
in system test `after_teardown`.
*Maxim Perepelitsa*
* Use request object for context if there's no controller
There is no controller instance when using a redirect route or a

@ -17,8 +17,11 @@ def before_setup
end
def after_teardown
take_failed_screenshot
Capybara.reset_sessions!
begin
take_failed_screenshot
ensure
Capybara.reset_sessions!
end
ensure
super
end

@ -703,6 +703,31 @@ def reset_sessions!
end
end
def test_reset_sessions_on_failed_system_test_screenshot
app_file "test/system/reset_sessions_on_failed_system_test_screenshot_test.rb", <<~RUBY
require "application_system_test_case"
class ResetSessionsOnFailedSystemTestScreenshotTest < ApplicationSystemTestCase
ActionDispatch::SystemTestCase.class_eval do
def take_failed_screenshot
raise Capybara::CapybaraError
end
end
Capybara.instance_eval do
def reset_sessions!
puts "Capybara.reset_sessions! called"
end
end
test "dummy" do
end
end
RUBY
output = run_test_command("test/system/reset_sessions_on_failed_system_test_screenshot_test.rb")
assert_match "Capybara.reset_sessions! called", output
end
def test_system_tests_are_not_run_with_the_default_test_command
app_file "test/system/dummy_test.rb", <<-RUBY
require "application_system_test_case"