@@ -104,6 +104,43 @@ describe("with transports", function (){
104104 } )
105105 } )
106106
107+ describe ( "visibilitychange" , function ( ) {
108+ it ( "does not connect a socket that was never connected" , function ( ) {
109+ socket = new Socket ( "/socket" )
110+ const teardownSpy = jest . spyOn ( socket , "teardown" )
111+
112+ Object . defineProperty ( document , "visibilityState" , { value : "hidden" , writable : true } )
113+ window . dispatchEvent ( new Event ( "visibilitychange" ) )
114+
115+ Object . defineProperty ( document , "visibilityState" , { value : "visible" , writable : true } )
116+ window . dispatchEvent ( new Event ( "visibilitychange" ) )
117+
118+ expect ( teardownSpy ) . not . toHaveBeenCalled ( )
119+ } )
120+
121+ it ( "reconnects on visibility change after unclean close" , function ( ) {
122+ socket = new Socket ( "/socket" )
123+ socket . closeWasClean = false
124+ const teardownSpy = jest . spyOn ( socket , "teardown" )
125+
126+ Object . defineProperty ( document , "visibilityState" , { value : "visible" , writable : true } )
127+ window . dispatchEvent ( new Event ( "visibilitychange" ) )
128+
129+ expect ( teardownSpy ) . toHaveBeenCalledTimes ( 1 )
130+ } )
131+
132+ it ( "does not reconnect on visibility change after clean close" , function ( ) {
133+ socket = new Socket ( "/socket" )
134+ socket . closeWasClean = true
135+ const teardownSpy = jest . spyOn ( socket , "teardown" )
136+
137+ Object . defineProperty ( document , "visibilityState" , { value : "visible" , writable : true } )
138+ window . dispatchEvent ( new Event ( "visibilitychange" ) )
139+
140+ expect ( teardownSpy ) . not . toHaveBeenCalled ( )
141+ } )
142+ } )
143+
107144 describe ( "protocol" , function ( ) {
108145 beforeEach ( function ( ) {
109146 socket = new Socket ( "/socket" )
0 commit comments