e2ed
Version:
E2E testing framework over Playwright
46 lines (45 loc) • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTestRunCallback = void 0;
const runId_1 = require("../../context/runId");
const testRunPromise_1 = require("../../context/testRunPromise");
const error_1 = require("../error");
const events_1 = require("../events");
/**
* Creates a callback for a test run from the target function.
* If the function throw an error, the error is thrown into the test run
* or at the call point.
* When the test launch is completed, the target function is no longer called
* (even if callback is called).
* @internal
*/
exports.createTestRunCallback = ((options) => {
const { targetFunction, throwExceptionAtCallPoint } = options;
const runId = (0, runId_1.getRunId)();
const testRunEvent = (0, events_1.getTestRunEvent)(runId);
const testRunPromise = (0, testRunPromise_1.getTestRunPromise)();
let isTestRunCompleted = false;
void testRunPromise.then(() => {
isTestRunCompleted = true;
});
// eslint-disable-next-line no-restricted-syntax
return async function testRunCallback(...args) {
if (isTestRunCompleted) {
return undefined;
}
try {
const result = await Promise.race([targetFunction.call(this, ...args), testRunPromise]);
return result;
}
catch (cause) {
const error = new error_1.E2edError(`Callback "${targetFunction.name}" was rejected because his target function threw an error`, { cause });
if (throwExceptionAtCallPoint) {
throw error;
}
else {
testRunEvent.reject(error);
}
}
return undefined;
};
});