Skip to content

Commit f7e346d

Browse files
muke1908claude
andcommitted
fix: widen WebSocketLogger constructor to string | URL and update tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 3fc1f38 commit f7e346d

2 files changed

Lines changed: 25 additions & 16 deletions

File tree

packages/logger/src/WebSocketLogger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export class WebSocketLogger implements Console {
1010
private timers: Map<string, number> = new Map();
1111
private counters: Map<string, number> = new Map();
1212

13-
constructor(url: URL) {
13+
constructor(url: string | URL) {
1414
this.ws = new WebSocket(url);
1515
}
1616

packages/logger/src/index.test.ts

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,32 @@
11
import { describe, it, expect, beforeEach, jest } from '@jest/globals';
22
import { 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+
414
describe('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

Comments
 (0)