aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
authorFumiaki MATSUSHIMA <mtsmfm@gmail.com>2017-03-01 20:39:29 +0900
committerFumiaki MATSUSHIMA <mtsmfm@gmail.com>2017-03-03 19:36:56 +0900
commit5edbdca5c0db00b0724bc0c9202c83194b688ae8 (patch)
treec8f6bcc7bfd6f8c57a529ca931e8fd72f98d8823 /railties
parente1a72fef7de9a5c0871b0ef1a4acb9483d2bf1f3 (diff)
downloadrails-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
Diffstat (limited to 'railties')
-rw-r--r--railties/test/application/test_runner_test.rb28
1 files changed, 28 insertions, 0 deletions
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}` }