diff options
author | Fumiaki MATSUSHIMA <mtsmfm@gmail.com> | 2017-03-01 20:39:29 +0900 |
---|---|---|
committer | Fumiaki MATSUSHIMA <mtsmfm@gmail.com> | 2017-03-03 19:36:56 +0900 |
commit | 5edbdca5c0db00b0724bc0c9202c83194b688ae8 (patch) | |
tree | c8f6bcc7bfd6f8c57a529ca931e8fd72f98d8823 | |
parent | e1a72fef7de9a5c0871b0ef1a4acb9483d2bf1f3 (diff) | |
download | rails-5edbdca5c0db00b0724bc0c9202c83194b688ae8.tar.gz rails-5edbdca5c0db00b0724bc0c9202c83194b688ae8.tar.bz2 rails-5edbdca5c0db00b0724bc0c9202c83194b688ae8.zip |
Fix random failure on system test with ajax
If application has ajax, browser may begin request after rollback.
`teardown_fixtures` will be called after `super` on `after_teardown`
so we must call `Capybara.reset_sessions!` before `super`
https://github.com/rails/rails/blob/b61a56541aecd7ac685d4f19d943177a3f1b465a/activerecord/lib/active_record/fixtures.rb#L857
-rw-r--r-- | actionpack/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb | 2 | ||||
-rw-r--r-- | railties/test/application/test_runner_test.rb | 28 |
2 files changed, 29 insertions, 1 deletions
diff --git a/actionpack/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb b/actionpack/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb index 1c89bfacfa..187ba2cc5f 100644 --- a/actionpack/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +++ b/actionpack/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb @@ -11,8 +11,8 @@ module ActionDispatch def after_teardown take_failed_screenshot - super Capybara.reset_sessions! + super end end end diff --git a/railties/test/application/test_runner_test.rb b/railties/test/application/test_runner_test.rb index e773b52dbb..3705448081 100644 --- a/railties/test/application/test_runner_test.rb +++ b/railties/test/application/test_runner_test.rb @@ -576,6 +576,34 @@ module ApplicationTests capture(:stderr) { run_test_command("test/models/warnings_test.rb -w") }) end + def test_reset_sessions_before_rollback_on_system_tests + app_file "test/system/reset_session_before_rollback_test.rb", <<-RUBY + require "application_system_test_case" + + class ResetSessionBeforeRollbackTest < ApplicationSystemTestCase + def teardown_fixtures + puts "rollback" + super + end + + Capybara.singleton_class.prepend(Module.new do + def reset_sessions! + puts "reset sessions" + super + end + end) + + test "dummy" do + end + end + RUBY + + run_test_command("test/system/reset_session_before_rollback_test.rb").tap do |output| + assert_match "reset sessions\nrollback", output + assert_match "1 runs, 0 assertions, 0 failures, 0 errors, 0 skips", output + end + end + private def run_test_command(arguments = "test/unit/test_test.rb") Dir.chdir(app_path) { `bin/rails t #{arguments}` } |