From ab7f2fcb441a0eccff6e043e0483fe855e5465eb Mon Sep 17 00:00:00 2001 From: Eric Shirley Date: Fri, 9 May 2025 12:00:21 -0400 Subject: [PATCH 1/2] Add tests for client disconnecting using the connect argument --- src/lib/use-websocket.test.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/lib/use-websocket.test.ts b/src/lib/use-websocket.test.ts index 90ea64b..d6a3720 100644 --- a/src/lib/use-websocket.test.ts +++ b/src/lib/use-websocket.test.ts @@ -45,8 +45,25 @@ test('readyState changes across readyState transitions', async () => { await server.connected; expect(result.current.readyState).toEqual(ReadyState.OPEN); + rerender({ + initialValue: false + }); + + await server.closed; + + expect(result.current.readyState).toEqual(ReadyState.CLOSED); + + rerender({ initialValue: true }); + + // for some reason, the connecting state is too fast here to show up, just wait for OPEN + await waitFor(() => { + expect(result.current.readyState).toEqual(ReadyState.OPEN); + }); + + await server.connected; + server.close(); - await expect(result.current.readyState).toEqual(ReadyState.CLOSED); + expect(result.current.readyState).toEqual(ReadyState.CLOSED); }) test('a function-promise based url works the same as a string-based url', async () => { From f3e78e729d74c19a203ef643ff8e3469647d93ca Mon Sep 17 00:00:00 2001 From: Eric Shirley Date: Fri, 9 May 2025 12:09:55 -0400 Subject: [PATCH 2/2] add mocks and assertions for connection and close events to the test --- src/lib/use-websocket.test.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/lib/use-websocket.test.ts b/src/lib/use-websocket.test.ts index d6a3720..5d20a13 100644 --- a/src/lib/use-websocket.test.ts +++ b/src/lib/use-websocket.test.ts @@ -31,6 +31,11 @@ test('useWebsocket should work with just a url provided', () => { }) test('readyState changes across readyState transitions', async () => { + const onCloseMock = jest.fn(); + const onConnectionMock = jest.fn(); + server.on("close", onCloseMock); + server.on("connection", onConnectionMock); + const { result, rerender, @@ -44,15 +49,18 @@ test('readyState changes across readyState transitions', async () => { expect(result.current.readyState).toEqual(ReadyState.CONNECTING); await server.connected; expect(result.current.readyState).toEqual(ReadyState.OPEN); + expect(onConnectionMock).toHaveBeenCalledTimes(1); rerender({ initialValue: false }); await server.closed; + expect(onCloseMock).toHaveBeenCalledTimes(1); expect(result.current.readyState).toEqual(ReadyState.CLOSED); + rerender({ initialValue: true }); // for some reason, the connecting state is too fast here to show up, just wait for OPEN @@ -61,8 +69,11 @@ test('readyState changes across readyState transitions', async () => { }); await server.connected; + expect(onConnectionMock).toHaveBeenCalledTimes(2); server.close(); + await server.closed; + expect(onCloseMock).toHaveBeenCalledTimes(2); expect(result.current.readyState).toEqual(ReadyState.CLOSED); })