UNPKG

@iosio/websocket-client

Version:

Simple wrapper for native client-side WebSocket. Similar to socket.io. Easy to use with any backend

142 lines (90 loc) 3.09 kB
import {Server, WebSocket} from 'mock-socket'; import Socket from "../src/"; import {tryParse} from '@iosio/utils/lib/string_manipulation'; import {isUndefined, isFunction,} from '@iosio/utils/lib/type_checks'; import {Eventer} from '@iosio/utils/lib/eventer'; const wait = time => new Promise(resolve => setTimeout(resolve, time)); const eve = Eventer(); const till = (it_happened) => { return new Promise(resolve => { eve.on(it_happened, () => { resolve(); }) }) }; const URL = "ws://localhost:4000"; const mockServer1 = new Server(URL); mockServer1.on('connection', sock => { eve.emit('server-connected'); // console.log('server connected'); eve.on('close-server', () => { console.log('closing server'); sock.close(); }); sock.on('close', () => { eve.emit('server-closed'); }) }); describe('websocket should work as expected', async () => { const socket = new Socket({ url: URL, websocket: WebSocket, should_console_log: false }); it('should connect successfully', async () => { socket.open(); const socketConnected = jest.fn(); socket.on('connect', () => { eve.emit('socket-connected'); socketConnected(); }); await Promise.all([ till('socket-connected'), till('server-connected') ]); expect(socketConnected).toHaveBeenCalledTimes(1); expect(socket._isConnected()).toBe(true); }); it('should close successfully', async () => { const socketClosed = jest.fn(); socket.on('disconnect', () => { eve.emit('socket-closed'); socketClosed(); }); socket.close(); await till('socket-closed'); expect(socketClosed).toHaveBeenCalledTimes(1); expect(socket._isConnected()).toBe(false); }); it('should attempt reconnect and connect successfully', async () => { //-------- set up ---------- socket.close(); socket._should_console_log = false; socket._auto_reconnect = true; const initial_connect = () => { eve.emit('socket-init'); socket.off('connect', initial_connect); }; socket.on('connect', initial_connect); //initial connection socket.open(); await till('socket-init'); const socketReconnecting = jest.fn(); socket.on('reconnecting', () => { eve.emit('socket-reconnecting'); socketReconnecting(); }); socket.on('connect', ()=>{ eve.emit('connected_') }); //-------- end set up ---------- //force close socket._socket.close(); //auto reconnect should take place await till('socket-reconnecting'); await till('connected_'); //should be successfully connected expect(socket._isConnected()).toBe(true); expect(socketReconnecting).toHaveBeenCalledTimes(1); }); });