diff --git a/packages/web3-rpc-providers/package.json b/packages/web3-rpc-providers/package.json index 606ced0ed22..3d66382ff51 100644 --- a/packages/web3-rpc-providers/package.json +++ b/packages/web3-rpc-providers/package.json @@ -49,6 +49,7 @@ "eslint-config-base-web3": "0.1.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-import": "^2.26.0", + "isomorphic-ws": "^5.0.0", "jest": "^29.7.0", "jest-extended": "^3.0.1", "prettier": "^2.7.1", diff --git a/packages/web3-rpc-providers/test/unit/constructor.test.ts b/packages/web3-rpc-providers/test/unit/constructor.test.ts index eb64b29163a..7d0457c7dc4 100644 --- a/packages/web3-rpc-providers/test/unit/constructor.test.ts +++ b/packages/web3-rpc-providers/test/unit/constructor.test.ts @@ -18,9 +18,44 @@ along with web3.js. If not, see . import HttpProvider from 'web3-providers-http'; import WebSocketProvider from 'web3-providers-ws'; +import WebSocket from 'isomorphic-ws'; + import { Web3ExternalProvider } from '../../src/web3_provider'; import { Network, Transport } from '../../src/types'; +// Mock implementation so ws doesnt have openhandle after test exits as it attempts to connects at start +jest.mock('isomorphic-ws', () => { + return { + __esModule: true, + default: jest.fn().mockImplementation(() => { + const eventListeners: { [key: string]: Function[] } = {}; + + return { + addEventListener: jest.fn((event, handler) => { + if (!eventListeners[event]) { + eventListeners[event] = []; + } + eventListeners[event].push(handler); + }), + removeEventListener: jest.fn((event, handler) => { + if (eventListeners[event]) { + eventListeners[event] = eventListeners[event].filter(h => h !== handler); + } + }), + dispatchEvent: jest.fn((event) => { + const eventType = event.type; + if (eventListeners[eventType]) { + eventListeners[eventType].forEach(handler => handler(event)); + } + }), + close: jest.fn(), + send: jest.fn(), + readyState: WebSocket.OPEN, + }; + }), + }; +}); + class MockWeb3ExternalProviderA extends Web3ExternalProvider { public constructor(network: Network, transport: Transport, token: string){ super(network, transport, token, ""); @@ -33,7 +68,7 @@ class MockWeb3ExternalProviderA extends Web3ExternalProvider { else if (_transport === Transport.WebSocket) transport = "wss://"; - return `${transport}example.com/`; + return `${transport}127.0.0.1/`; } } @@ -54,7 +89,6 @@ describe('Web3ExternalProvider', () => { const token = 'your-token'; const provider = new MockWeb3ExternalProviderA(network, transport, token); - expect(provider.provider).toBeInstanceOf(WebSocketProvider); });