Skip to content

Commit c1c465a

Browse files
authored
test: reduce e2e test runtime (#236)
1 parent 98f3b40 commit c1c465a

2 files changed

Lines changed: 161 additions & 103 deletions

File tree

tests/e2e/client-reconnect.test.js

Lines changed: 73 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,72 @@ const config = require('../fixtures/simple-config/rspack.config');
44
const runBrowser = require('../helpers/run-browser');
55
const port = require('../helpers/ports-map')['client-reconnect-option'];
66

7+
const DISCONNECTED_MESSAGE = 'Disconnected!';
8+
const RECONNECT_MESSAGE = 'Trying to reconnect...';
9+
const FAST_RECONNECT_DELAY = 100;
10+
11+
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
12+
13+
const waitForMessages = async (
14+
consoleMessages,
15+
predicate,
16+
errorMessage,
17+
timeout = 10000,
18+
) => {
19+
const startedAt = Date.now();
20+
21+
while (Date.now() - startedAt < timeout) {
22+
const texts = consoleMessages.map((message) => message.text());
23+
24+
if (predicate(texts)) {
25+
return;
26+
}
27+
28+
await delay(50);
29+
}
30+
31+
throw new Error(errorMessage);
32+
};
33+
34+
const waitForReconnectMessages = (consoleMessages, expectedCount) =>
35+
waitForMessages(
36+
consoleMessages,
37+
(texts) =>
38+
texts.filter((text) => text.includes(RECONNECT_MESSAGE)).length >=
39+
expectedCount,
40+
`Expected ${expectedCount} reconnect messages.`,
41+
15000,
42+
);
43+
44+
const waitForDisconnectMessage = (consoleMessages) =>
45+
waitForMessages(
46+
consoleMessages,
47+
(texts) => texts.some((text) => text.includes(DISCONNECTED_MESSAGE)),
48+
`Expected "${DISCONNECTED_MESSAGE}" message.`,
49+
);
50+
51+
const waitForConsoleMessages = (consoleMessages, expectedCount) =>
52+
waitForMessages(
53+
consoleMessages,
54+
(texts) => texts.length >= expectedCount,
55+
`Expected ${expectedCount} console messages.`,
56+
);
57+
58+
const useFastPageReconnectTimers = async (page) => {
59+
await page.evaluateOnNewDocument((fastReconnectDelay) => {
60+
const originalSetTimeout = window.setTimeout.bind(window);
61+
62+
window.setTimeout = (handler, timeout, ...args) =>
63+
originalSetTimeout(
64+
handler,
65+
typeof timeout === 'number' && timeout >= 1000
66+
? fastReconnectDelay
67+
: timeout,
68+
...args,
69+
);
70+
}, FAST_RECONNECT_DELAY);
71+
};
72+
773
describe('client.reconnect option', () => {
874
describe('specified as true', () => {
975
let compiler;
@@ -21,6 +87,7 @@ describe('client.reconnect option', () => {
2187
await server.start();
2288

2389
({ page, browser } = await runBrowser());
90+
await useFastPageReconnectTimers(page);
2491

2592
pageErrors = [];
2693
consoleMessages = [];
@@ -49,21 +116,7 @@ describe('client.reconnect option', () => {
49116
await server.stop();
50117
}
51118

52-
let interval;
53-
54-
await new Promise((resolve) => {
55-
interval = setInterval(() => {
56-
const retryingMessages = consoleMessages.filter((message) =>
57-
message.text().includes('Trying to reconnect...'),
58-
);
59-
60-
if (retryingMessages.length >= 5) {
61-
clearInterval(interval);
62-
63-
resolve();
64-
}
65-
}, 1000);
66-
});
119+
await waitForReconnectMessages(consoleMessages, 5);
67120

68121
expect(pageErrors).toMatchSnapshot('page errors');
69122
});
@@ -85,6 +138,7 @@ describe('client.reconnect option', () => {
85138
await server.start();
86139

87140
({ page, browser } = await runBrowser());
141+
await useFastPageReconnectTimers(page);
88142

89143
pageErrors = [];
90144
consoleMessages = [];
@@ -113,16 +167,7 @@ describe('client.reconnect option', () => {
113167
await server.stop();
114168
}
115169

116-
// Can't wait to check for unlimited times so wait only for couple retries
117-
await new Promise((resolve) =>
118-
setTimeout(
119-
() => {
120-
resolve();
121-
},
122-
// eslint-disable-next-line no-restricted-properties
123-
1000 * 2 ** 3,
124-
),
125-
);
170+
await waitForDisconnectMessage(consoleMessages);
126171

127172
expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(
128173
'console messages',
@@ -148,6 +193,7 @@ describe('client.reconnect option', () => {
148193
await server.start();
149194

150195
({ page, browser } = await runBrowser());
196+
await useFastPageReconnectTimers(page);
151197

152198
pageErrors = [];
153199
consoleMessages = [];
@@ -176,16 +222,8 @@ describe('client.reconnect option', () => {
176222
await server.stop();
177223
}
178224

179-
// Can't wait to check for unlimited times so wait only for couple retries
180-
await new Promise((resolve) =>
181-
setTimeout(
182-
() => {
183-
resolve();
184-
},
185-
// eslint-disable-next-line no-restricted-properties
186-
1000 * 2 ** 3,
187-
),
188-
);
225+
await waitForReconnectMessages(consoleMessages, 2);
226+
await waitForConsoleMessages(consoleMessages, 10);
189227

190228
expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(
191229
'console messages',

0 commit comments

Comments
 (0)