diff options
author | Richard Macklin <richard.github@nrm.com> | 2019-04-20 19:09:50 -0700 |
---|---|---|
committer | Richard Macklin <richard.github@nrm.com> | 2019-04-20 19:32:30 -0700 |
commit | ef12ccfd8bc42d88611dea1190988214836b951c (patch) | |
tree | f4c74e4219da33f8f4ed019cea5629d2a348fd4c /railties/test/application | |
parent | 80b7d58f34a965fc0269ab7e0efa86d39b86be56 (diff) | |
download | rails-ef12ccfd8bc42d88611dea1190988214836b951c.tar.gz rails-ef12ccfd8bc42d88611dea1190988214836b951c.tar.bz2 rails-ef12ccfd8bc42d88611dea1190988214836b951c.zip |
Make system tests take failed screenshots in `before_teardown` hook
Previously we were calling the `take_failed_screenshot` method in an
`after_teardown` hook. However, this means that other teardown hooks
have to be executed before we take the screenshot. Since there can be
dynamic updates to the page after the assertion fails and before we
take a screenshot, it seems desirable to minimize that gap as much as
possible. Taking the screenshot in a `before_teardown` rather than an
`after_teardown` helps with that, and has a side benefit of allowing
us to remove the nested `ensure` commented on here:
https://github.com/rails/rails/pull/34411#discussion_r232819478
Diffstat (limited to 'railties/test/application')
-rw-r--r-- | railties/test/application/test_runner_test.rb | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/railties/test/application/test_runner_test.rb b/railties/test/application/test_runner_test.rb index 0bdd2b314d..1ab45abcd0 100644 --- a/railties/test/application/test_runner_test.rb +++ b/railties/test/application/test_runner_test.rb @@ -794,6 +794,32 @@ module ApplicationTests 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" |