Skip to content

Commit

Permalink
refactor: better tests cleanup and sometimes dont use expect.assertions
Browse files Browse the repository at this point in the history
  • Loading branch information
enisdenjo committed Aug 9, 2022
1 parent 98fa659 commit 7508c3b
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 18 deletions.
23 changes: 14 additions & 9 deletions src/__tests__/client.ts
Expand Up @@ -1466,10 +1466,9 @@ describe('reconnecting', () => {
});

// client reported the error immediately, meaning it wont retry
expect.assertions(1);
await sub.waitForError((err) => {
expect((err as CloseEvent).code).toBe(1005);
}, 20);
});
});

it('should reconnect silently after socket closes', async () => {
Expand Down Expand Up @@ -1504,10 +1503,9 @@ describe('reconnecting', () => {
});

// client reported the error, meaning it wont retry anymore
expect.assertions(1);
await sub.waitForError((err) => {
expect((err as CloseEvent).code).toBe(1005);
}, 20);
});
});

it('should resubscribe all subscribers on silent reconnects', async () => {
Expand Down Expand Up @@ -1629,10 +1627,9 @@ describe('reconnecting', () => {
// client reported the error immediately, meaning it wont retry
await sub.waitForError((err) => {
expect((err as CloseEvent).code).toBe(code);
}, 20);
});
}

expect.assertions(8);
const warn = console.warn;
console.warn = () => {
/* hide warnings for test */
Expand Down Expand Up @@ -2063,7 +2060,6 @@ describe('events', () => {

it('should emit the websocket connection error', (done) => {
expect.assertions(3);

createClient({
url: 'ws://localhost/i/dont/exist',
lazy: false,
Expand All @@ -2087,7 +2083,8 @@ describe('events', () => {
});

it('should emit the websocket connection error on first subscribe in lazy mode', (done) => {
expect.assertions(3);
// dont use expect.assertions(3) because https://github.com/facebook/jest/issues/8297
const expected = jest.fn();

const client = createClient({
url: 'ws://localhost/i/dont/exist',
Expand All @@ -2097,11 +2094,13 @@ describe('events', () => {
client.on('closed', (err) => {
// websocket closed
expect((err as CloseEvent).code).toBe(1006);
expected();
});

client.on('error', (err) => {
// connection error
expect((err as ErrorEvent).message).toContain('connect ECONNREFUSED');
expected();
});

client.subscribe(
Expand All @@ -2112,6 +2111,7 @@ describe('events', () => {
error: (err) => {
// connection error
expect((err as ErrorEvent).message).toContain('connect ECONNREFUSED');
expect(expected).toBeCalledTimes(2);
done();
},
},
Expand Down Expand Up @@ -2209,6 +2209,9 @@ describe('events', () => {
});

it('should provide the latest socket reference to event listeners', async () => {
// dont use expect.assertions(6) because https://github.com/facebook/jest/issues/8297
const expected = jest.fn();

const { url, ...server } = await startTServer();

const client = createClient({
Expand All @@ -2221,11 +2224,13 @@ describe('events', () => {
// only latest socket can be open
const sock = socket as WebSocket;
expect(sock.readyState).toBe(sock.OPEN);
expected();
},
connected: (socket) => {
// only latest socket can be open
const sock = socket as WebSocket;
expect(sock.readyState).toBe(sock.OPEN);
expected();
},
},
});
Expand Down Expand Up @@ -2257,6 +2262,6 @@ describe('events', () => {
await tsubscribe(client, { query: '{ getValue }' }).waitForComplete();

// opened and connected should be called 6 times (3 times connected, 2 times disconnected)
expect.assertions(6);
expect(expected).toBeCalledTimes(6);
});
});
24 changes: 15 additions & 9 deletions src/__tests__/utils/tservers.ts
Expand Up @@ -23,12 +23,9 @@ export { WSExtra, UWSExtra, FastifyExtra };

// distinct server for each test; if you forget to dispose, the fixture wont
const leftovers: Dispose[] = [];
afterEach(async () => {
afterAll(async () => {
while (leftovers.length > 0) {
// if not disposed by test, cleanup
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const dispose = leftovers.pop()!;
await dispose();
await leftovers.pop()?.();
}
});

Expand Down Expand Up @@ -116,15 +113,17 @@ export async function startRawServer(): Promise<{
socket.once('close', () => sockets.delete(socket));
});

let disposed = false;
const dispose: Dispose = (beNice) => {
return new Promise((resolve) => {
if (disposed) return resolve();
disposed = true;
if (!beNice)
for (const socket of sockets) {
socket.terminate();
sockets.delete(socket);
}
server.close(() => {
leftovers.splice(leftovers.indexOf(dispose), 1);
resolve();
});
});
Expand Down Expand Up @@ -194,8 +193,11 @@ export async function startWSTServer(
keepAlive,
);

let disposed = false;
const dispose: Dispose = (beNice) => {
return new Promise((resolve, reject) => {
if (disposed) return resolve();
disposed = true;
if (!beNice)
for (const socket of sockets) {
socket.terminate();
Expand All @@ -204,7 +206,6 @@ export async function startWSTServer(
const disposing = server.dispose() as Promise<void>;
disposing.catch(reject).then(() => {
wsServer.close(() => {
leftovers.splice(leftovers.indexOf(dispose), 1);
resolve();
});
});
Expand Down Expand Up @@ -393,13 +394,15 @@ export async function startUWSTServer(
},
);

let disposed = false;
const dispose: Dispose = async (beNice) => {
if (disposed) return;
disposed = true;
for (const socket of sockets) {
if (beNice) socket.end(1001, 'Going away');
else socket.close();
}
uWS.us_listen_socket_close(listenSocket);
leftovers.splice(leftovers.indexOf(dispose), 1);
};
leftovers.push(dispose);

Expand Down Expand Up @@ -541,8 +544,12 @@ export async function startFastifyWSTServer(
});
});

let disposed = false;
const dispose: Dispose = (beNice) => {
return new Promise((resolve, reject) => {
if (disposed) return resolve();
disposed = true;

for (const socket of sockets) {
if (beNice) socket.close(1001, 'Going away');
else socket.terminate();
Expand All @@ -552,7 +559,6 @@ export async function startFastifyWSTServer(
fastify.websocketServer.close((err) => {
if (err) return reject(err);
fastify.close(() => {
leftovers.splice(leftovers.indexOf(dispose), 1);
resolve();
});
});
Expand Down

0 comments on commit 7508c3b

Please sign in to comment.