Move WebSocketCtor reference inside createSocket method to support WebSocket mocking #5315
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The kind of change this PR does introduce
Current behavior
The
WebSocketCtor
is defined at module scope which captures WebSocket reference before mocking libraries like MSW can intercept it. Since bundlers (webpack/vite) typically load engine.io-client before MSW, the original WebSocket implementation is used even when mocks are applied later.New behavior
WebSocketCtor
reference is moved inside thecreateSocket
method, ensuring it always uses the current value of globalThis.WebSocket at call time. This allows mocking libraries to properly intercept WebSocket connections in Socket.IO.Other information (e.g. related issues)
Fixes mswjs/socket.io-binding#12
I've tested this solution with both webpack and vite, confirming it resolves the issue in both bundlers.