Skip to content

Commit f015362

Browse files
committed
PRO-10170 fix: getGlobalErrorHandler (don't use test context)
1 parent 615dd6c commit f015362

7 files changed

Lines changed: 40 additions & 36 deletions

File tree

autotests/entities/worker.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import {log} from 'e2ed/utils';
44
import type {UserWorker} from 'autotests/types';
55
import type {ClientFunction} from 'e2ed/types';
66

7-
const clientGetUsers = createClientFunction(
8-
(delay: number) =>
9-
fetch(`https://reqres.in/api/users?delay=${delay}`, {method: 'GET'}).then((res) => res.json()),
10-
{name: 'getUsers', timeout: 6_000},
11-
);
7+
type GetUsersOptions = Readonly<{delay?: number; retries?: number}> | undefined;
8+
9+
let clientGetUsers: ClientFunction<[number], unknown> | undefined;
10+
let clientGetUsersRetries: number | undefined;
1211

1312
/**
1413
* Adds user-worker.
@@ -26,8 +25,20 @@ export const addUser: ClientFunction<[UserWorker, number?], Promise<object>> = c
2625
/**
2726
* Get list of user-workers.
2827
*/
29-
export const getUsers = (delay: number = 0): Promise<unknown> => {
28+
export const getUsers = ({delay = 0, retries = 0}: GetUsersOptions = {}): Promise<unknown> => {
3029
log(`Send API request with delay = ${delay}s`);
3130

31+
if (clientGetUsers === undefined || clientGetUsersRetries !== retries) {
32+
clientGetUsersRetries = retries;
33+
34+
clientGetUsers = createClientFunction(
35+
(clientDelay: number) =>
36+
fetch(`https://reqres.in/api/users?delay=${clientDelay}`, {method: 'GET'}).then(
37+
(res) => res.json() as unknown,
38+
),
39+
{name: 'getUsers', retries, timeout: 6_000},
40+
);
41+
}
42+
3243
return clientGetUsers(delay);
3344
};

autotests/packs/allTests.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export const pack: Pack = {
5252
deviceScaleFactor: 1,
5353
doAfterPack,
5454
doBeforePack,
55-
enableCsp: true,
55+
enableCsp: false,
5656
enableHeadlessMode: true,
5757
enableMobileDeviceMode: false,
5858
enableTouchEventEmulation: false,
@@ -80,7 +80,7 @@ export const pack: Pack = {
8080
skipTests,
8181
takeFullPageScreenshotOnError: false,
8282
takeViewportScreenshotOnError: true,
83-
testFileGlobs: ['**/autotests/tests/**/*.ts'],
83+
testFileGlobs: ['**/autotests/tests/**/switchingPages.ts'],
8484
testIdleTimeout: 8_000,
8585
testTimeout: 15_000,
8686
userAgent,
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ test('support switching of pages and tabs', {meta: {testId: '21'}}, async () =>
1818
if (numberOfSentRequests < maxNumberOfRequests) {
1919
numberOfSentRequests += 1;
2020

21-
void getUsers();
21+
void getUsers({retries: 1});
2222
}
2323
}, 1_000);
2424

autotests/tests/waitForAllRequestsComplete.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ test(
3333

3434
let promise = waitForAllRequestsComplete(() => true, {timeout: 1000});
3535

36-
void getUsers(2);
36+
void getUsers({delay: 2});
3737

3838
await assertFunctionThrows(
3939
() => promise,
@@ -46,7 +46,7 @@ test(
4646
throw new E2edError('waitForAllRequestsComplete did not wait for timeout', {waitedInMs});
4747
}
4848

49-
void getUsers(2);
49+
void getUsers({delay: 2});
5050

5151
startRequestInMs = Date.now();
5252

@@ -66,9 +66,9 @@ test(
6666

6767
promise = waitForAllRequestsComplete(() => true);
6868

69-
await getUsers(1);
69+
await getUsers({delay: 1});
7070
await waitForTimeout(400);
71-
await getUsers(1);
71+
await getUsers({delay: 1});
7272

7373
startRequestInMs = Date.now();
7474

@@ -85,7 +85,7 @@ test(
8585

8686
promise = waitForAllRequestsComplete(() => true, {maxIntervalBetweenRequestsInMs: 300});
8787

88-
await getUsers(1);
88+
await getUsers({delay: 1});
8989

9090
startRequestInMs = Date.now();
9191

src/createClientFunction.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ import {getPlaywrightPage} from './useContext';
99

1010
import type {ClientFunction} from './types/internal';
1111

12-
type Options = Readonly<{name?: string; timeout?: number}>;
12+
type Options = Readonly<{name?: string; retries?: number; timeout?: number}>;
1313

1414
/**
1515
* Creates a client function.
1616
*/
1717
export const createClientFunction = <Args extends readonly unknown[], Result>(
1818
originalFn: (...args: Args) => Result,
19-
{name: nameFromOptions, timeout}: Options = {},
19+
{name: nameFromOptions, retries = 0, timeout}: Options = {},
2020
): ClientFunction<Args, Result> => {
2121
setCustomInspectOnFunction(originalFn);
2222

@@ -48,6 +48,18 @@ export const createClientFunction = <Args extends readonly unknown[], Result>(
4848
return page.evaluate(func, args);
4949
}
5050

51+
if (retries > 0) {
52+
let retryIndex = 1;
53+
54+
while (retryIndex <= retries) {
55+
retryIndex += 1;
56+
57+
try {
58+
return page.evaluate(func, args);
59+
} catch {}
60+
}
61+
}
62+
5163
throw evaluateError;
5264
}),
5365
clientFunctionTimeout,

src/test.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import type {TestFunction} from './types/internal';
77

88
import {test as playwrightTest} from '@playwright/test';
99

10-
process.removeAllListeners('unhandledRejection');
11-
1210
process.on('uncaughtException', getGlobalErrorHandler('TestUncaughtException'));
1311
process.on('unhandledRejection', getGlobalErrorHandler('TestUnhandledRejection'));
1412

src/utils/getGlobalErrorHandler.ts

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import {getMeta} from '../context/meta';
2-
import {getRunId} from '../context/runId';
3-
41
import {E2edError} from './error';
52
import {writeGlobalError} from './fs';
6-
import {generalLog} from './generalLog';
73

84
import type {GlobalErrorType} from '../types/internal';
95

@@ -14,20 +10,7 @@ import type {GlobalErrorType} from '../types/internal';
1410
export const getGlobalErrorHandler =
1511
(type: GlobalErrorType) =>
1612
(cause: unknown): void => {
17-
const message = `Caught ${type}`;
18-
19-
if (type.startsWith('Test')) {
20-
const meta = getMeta();
21-
const runId = getRunId();
22-
23-
generalLog(message, {cause, meta, runId});
24-
25-
return;
26-
}
27-
28-
generalLog(message, {cause});
29-
30-
const error = new E2edError(message, {cause});
13+
const error = new E2edError(`Caught ${type}`, {cause});
3114

3215
void writeGlobalError(error.toString());
3316
};

0 commit comments

Comments
 (0)