Skip to content

Commit

Permalink
Merge pull request #36047 from rmacklin/take-screenshot-sooner
Browse files Browse the repository at this point in the history
Make system tests take failed screenshots in `before_teardown` hook
  • Loading branch information
eileencodes committed Apr 22, 2019
2 parents 89b8664 + ef12ccf commit 2db5895
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 5 deletions.
9 changes: 9 additions & 0 deletions actionpack/CHANGELOG.md
@@ -1,3 +1,12 @@
* Make system tests take a failed screenshot in a `before_teardown` hook
rather than an `after_teardown` hook.

This helps minimize the time gap between when an assertion fails and when
the screenshot is taken (reducing the time in which the page could have
been dynamically updated after the assertion failed).

*Richard Macklin*

* Introduce `ActionDispatch::ActionableExceptions`.

The `ActionDispatch::ActionableExceptions` middleware dispatches actions
Expand Down
Expand Up @@ -16,12 +16,14 @@ def before_setup
super
end

def before_teardown
take_failed_screenshot
ensure
super
end

def after_teardown
begin
take_failed_screenshot
ensure
Capybara.reset_sessions!
end
Capybara.reset_sessions!
ensure
super
end
Expand Down
26 changes: 26 additions & 0 deletions railties/test/application/test_runner_test.rb
Expand Up @@ -794,6 +794,32 @@ def reset_sessions!
assert_match "Capybara.reset_sessions! called", output
end

def test_failed_system_test_screenshot_should_be_taken_before_other_teardown
app_file "test/system/failed_system_test_screenshot_should_be_taken_before_other_teardown_test.rb", <<~RUBY
require "application_system_test_case"
require "selenium/webdriver"
class FailedSystemTestScreenshotShouldBeTakenBeforeOtherTeardownTest < ApplicationSystemTestCase
ActionDispatch::SystemTestCase.class_eval do
def take_failed_screenshot
puts "take_failed_screenshot called"
super
end
end
def teardown
puts "test teardown called"
super
end
test "dummy" do
end
end
RUBY
output = run_test_command("test/system/failed_system_test_screenshot_should_be_taken_before_other_teardown_test.rb")
assert_match(/take_failed_screenshot called\n.*test teardown 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"
Expand Down

0 comments on commit 2db5895

Please sign in to comment.