@@ -2450,12 +2450,7 @@ describe('Client', () => {
24502450 } ) ;
24512451
24522452 it ( 'allows synchronously unregistering multiple callbacks from within the callback' , ( ) => {
2453- const client = new TestClient (
2454- getDefaultTestClientOptions ( {
2455- dsn : PUBLIC_DSN ,
2456- enableSend : true ,
2457- } ) ,
2458- ) ;
2453+ const client = new TestClient ( getDefaultTestClientOptions ( ) ) ;
24592454
24602455 const callback1 = vi . fn ( ) ;
24612456 const callback2 = vi . fn ( ) ;
@@ -2479,12 +2474,44 @@ describe('Client', () => {
24792474
24802475 client . emit ( 'close' ) ;
24812476
2482- expect ( callback1 ) . toHaveBeenCalledTimes ( 0 ) ;
2483- expect ( callback2 ) . toHaveBeenCalledTimes ( 0 ) ;
2477+ expect ( callback1 ) . not . toHaveBeenCalled ( ) ;
2478+ expect ( callback2 ) . not . toHaveBeenCalled ( ) ;
2479+ } ) ;
2480+
2481+ it ( 'allows synchronously unregistering other callbacks from within one callback' , ( ) => {
2482+ const client = new TestClient ( getDefaultTestClientOptions ( ) ) ;
2483+
2484+ const callback1 = vi . fn ( ) ;
2485+ const callback2 = vi . fn ( ) ;
2486+
2487+ const removeCallback1 = client . on ( 'close' , ( ) => {
2488+ callback1 ( ) ;
2489+ removeCallback1 ( ) ;
2490+ removeCallback2 ( ) ;
2491+ } ) ;
2492+ const removeCallback2 = client . on ( 'close' , ( ) => {
2493+ callback2 ( ) ;
2494+ removeCallback2 ( ) ;
2495+ removeCallback1 ( ) ;
2496+ } ) ;
2497+
2498+ client . emit ( 'close' ) ;
2499+
2500+ expect ( callback1 ) . toHaveBeenCalledTimes ( 1 ) ;
2501+ // callback2 was already cancelled from within callback1, so it must not be called
2502+ expect ( callback2 ) . not . toHaveBeenCalled ( ) ;
2503+
2504+ callback1 . mockReset ( ) ;
2505+ callback2 . mockReset ( ) ;
2506+
2507+ client . emit ( 'close' ) ;
2508+
2509+ expect ( callback1 ) . not . toHaveBeenCalled ( ) ;
2510+ expect ( callback2 ) . not . toHaveBeenCalled ( ) ;
24842511 } ) ;
24852512
24862513 it ( 'allows registering and unregistering the same callback multiple times' , ( ) => {
2487- const client = new TestClient ( options ) ;
2514+ const client = new TestClient ( getDefaultTestClientOptions ( ) ) ;
24882515 const callback = vi . fn ( ) ;
24892516
24902517 const unregister1 = client . on ( 'close' , callback ) ;
@@ -2507,7 +2534,25 @@ describe('Client', () => {
25072534 callback . mockReset ( ) ;
25082535 client . emit ( 'close' ) ;
25092536
2510- expect ( callback ) . toHaveBeenCalledTimes ( 0 ) ;
2537+ expect ( callback ) . not . toHaveBeenCalled ( ) ;
2538+ } ) ;
2539+
2540+ it ( 'handles unregistering a callback multiple times' , ( ) => {
2541+ const client = new TestClient ( getDefaultTestClientOptions ( ) ) ;
2542+ const callback = vi . fn ( ) ;
2543+
2544+ const unregister = client . on ( 'close' , callback ) ;
2545+ client . emit ( 'close' ) ;
2546+ expect ( callback ) . toHaveBeenCalledTimes ( 1 ) ;
2547+
2548+ callback . mockReset ( ) ;
2549+ unregister ( ) ;
2550+ unregister ( ) ;
2551+ unregister ( ) ;
2552+
2553+ client . emit ( 'close' ) ;
2554+
2555+ expect ( callback ) . not . toHaveBeenCalled ( ) ;
25112556 } ) ;
25122557 } ) ;
25132558
0 commit comments