11import { describe , it , expect , beforeEach , jest } from '@jest/globals' ;
22import { WebSocketLogger } from './index.js' ;
33
4+ const mockSend = jest . fn ( ) ;
5+ const mockWs = {
6+ readyState : 1 , // WebSocket.OPEN
7+ send : mockSend ,
8+ } ;
9+
10+ // Mock the global WebSocket constructor
11+ ( global as any ) . WebSocket = jest . fn ( ( ) => mockWs ) ;
12+ ( global as any ) . WebSocket . OPEN = 1 ;
13+
414describe ( 'WebSocketLogger' , ( ) => {
515 let logger : WebSocketLogger ;
6- let mockWs : any ;
716
817 beforeEach ( ( ) => {
9- mockWs = {
10- readyState : 1 , // WebSocket.OPEN
11- send : jest . fn ( )
12- } ;
13- logger = new WebSocketLogger ( mockWs ) ;
18+ mockSend . mockClear ( ) ;
19+ ( global as any ) . WebSocket . mockClear ( ) ;
20+ mockWs . readyState = 1 ;
21+ logger = new WebSocketLogger ( 'wss://localhost:8080' ) ;
1422 } ) ;
1523
1624 it ( 'should send log message over WebSocket' , ( ) => {
1725 logger . log ( 'test message' , 123 ) ;
18-
19- expect ( mockWs . send ) . toHaveBeenCalledTimes ( 1 ) ;
20- const sentData = JSON . parse ( mockWs . send . mock . calls [ 0 ] [ 0 ] ) ;
21-
26+
27+ expect ( mockSend ) . toHaveBeenCalledTimes ( 1 ) ;
28+ const sentData = JSON . parse ( mockSend . mock . calls [ 0 ] [ 0 ] as string ) ;
29+
2230 expect ( sentData . type ) . toBe ( 'log' ) ;
2331 expect ( sentData . args ) . toEqual ( [ 'test message' , 123 ] ) ;
2432 expect ( sentData . timestamp ) . toBeGreaterThan ( 0 ) ;
@@ -30,12 +38,13 @@ describe('WebSocketLogger', () => {
3038 logger . error ( 'error' ) ;
3139 logger . info ( 'info' ) ;
3240 logger . debug ( 'debug' ) ;
33-
34- expect ( mockWs . send ) . toHaveBeenCalledTimes ( 4 ) ;
41+
42+ expect ( mockSend ) . toHaveBeenCalledTimes ( 4 ) ;
3543 } ) ;
3644
37- it ( 'should gracefully handle disconnected WebSocket' , ( ) => {
38- const disconnectedLogger = new WebSocketLogger ( null ) ;
39- expect ( ( ) => disconnectedLogger . log ( 'test' ) ) . not . toThrow ( ) ;
45+ it ( 'should not throw when WebSocket is not open' , ( ) => {
46+ mockWs . readyState = 3 ; // WebSocket.CLOSED
47+ expect ( ( ) => logger . log ( 'test' ) ) . not . toThrow ( ) ;
48+ expect ( mockSend ) . not . toHaveBeenCalled ( ) ;
4049 } ) ;
4150} ) ;
0 commit comments