mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Bubble up IntegrationTest assertions count
`IntegrationTest#open_session` uses `dup` to create the new session, which meant it had its own copy of `@assertions`. This prevented the assertions from being correctly counted and reported. Child sessions now have their `attr_accessor` overriden to delegate to the root session.
This commit is contained in:
parent
dd868aa0c8
commit
affe3e2e15
3 changed files with 30 additions and 0 deletions
|
@ -1,3 +1,15 @@
|
|||
* Include child session assertion count in ActionDispatch::IntegrationTest
|
||||
|
||||
`IntegrationTest#open_session` uses `dup` to create the new session, which
|
||||
meant it had its own copy of `@assertions`. This prevented the assertions
|
||||
from being correctly counted and reported.
|
||||
|
||||
Child sessions now have their `attr_accessor` overriden to delegate to the
|
||||
root session.
|
||||
|
||||
Fixes #32142
|
||||
|
||||
*Sam Bostock*
|
||||
|
||||
|
||||
Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/actionpack/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -310,6 +310,7 @@ module ActionDispatch
|
|||
APP_SESSIONS = {}
|
||||
|
||||
attr_reader :app
|
||||
attr_accessor :root_session # :nodoc:
|
||||
|
||||
def initialize(*args, &blk)
|
||||
super(*args, &blk)
|
||||
|
@ -373,10 +374,19 @@ module ActionDispatch
|
|||
def open_session
|
||||
dup.tap do |session|
|
||||
session.reset!
|
||||
session.root_session = self.root_session || self
|
||||
yield session if block_given?
|
||||
end
|
||||
end
|
||||
|
||||
def assertions # :nodoc:
|
||||
root_session ? root_session.assertions : super
|
||||
end
|
||||
|
||||
def assertions=(assertions) # :nodoc:
|
||||
root_session ? root_session.assertions = assertions : super
|
||||
end
|
||||
|
||||
# Copy the instance variables from the current session instance into the
|
||||
# test instance.
|
||||
def copy_session_variables! #:nodoc:
|
||||
|
|
|
@ -138,6 +138,14 @@ class IntegrationTestTest < ActiveSupport::TestCase
|
|||
assert_not session1.equal?(session2)
|
||||
end
|
||||
|
||||
def test_child_session_assertions_bubble_up_to_root
|
||||
assertions_before = @test.assertions
|
||||
@test.open_session.assert(true)
|
||||
assertions_after = @test.assertions
|
||||
|
||||
assert_equal 1, assertions_after - assertions_before
|
||||
end
|
||||
|
||||
# RSpec mixes Matchers (which has a #method_missing) into
|
||||
# IntegrationTest's superclass. Make sure IntegrationTest does not
|
||||
# try to delegate these methods to the session object.
|
||||
|
|
Loading…
Reference in a new issue