e2ed
Version:
E2E testing framework over Playwright
45 lines (44 loc) • 2.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createClientFunction = void 0;
const testIdleTimeout_1 = require("./context/testIdleTimeout");
const error_1 = require("./utils/error");
const fn_1 = require("./utils/fn");
const generalLog_1 = require("./utils/generalLog");
const getDurationWithUnits_1 = require("./utils/getDurationWithUnits");
const promise_1 = require("./utils/promise");
const testRun_1 = require("./utils/testRun");
const useContext_1 = require("./useContext");
/**
* Creates a client function.
*/
const createClientFunction = (originalFn, { name: nameFromOptions, timeout } = {}) => {
(0, fn_1.setCustomInspectOnFunction)(originalFn);
const name = nameFromOptions ?? originalFn.name;
const printedClientFunctionName = `client function${name ? ` "${name}"` : ''}`;
const clientFunctionWithTimeout = (...args) => {
const page = (0, useContext_1.getPlaywrightPage)();
const clientFunctionTimeout = timeout ?? (0, testIdleTimeout_1.getTestIdleTimeout)();
const timeoutWithUnits = (0, getDurationWithUnits_1.getDurationWithUnits)(clientFunctionTimeout);
const error = new error_1.E2edError(`Client function "${name}" rejected after ${timeoutWithUnits} timeout`);
// eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func
const func = new Function('args', `return (${originalFn.toString()})(...args)`);
return (0, promise_1.addTimeoutToPromise)(page.evaluate(func, args).catch(async (evaluateError) => {
const errorString = String(evaluateError);
if (errorString.includes('Execution context was destroyed')) {
await page.waitForLoadState();
return page.evaluate(func, args);
}
throw evaluateError;
}), clientFunctionTimeout, error);
};
(0, generalLog_1.generalLog)(`Create ${printedClientFunctionName}`, { originalFn });
return (...args) => {
const clientFunctionWithTestRun = (0, testRun_1.createTestRunCallback)({
targetFunction: clientFunctionWithTimeout,
throwExceptionAtCallPoint: true,
});
return clientFunctionWithTestRun(...args);
};
};
exports.createClientFunction = createClientFunction;