UNPKG

e2ed

Version:

E2E testing framework over Playwright

83 lines (82 loc) 4.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createExpectMethod = void 0; const internal_1 = require("../../constants/internal"); const asserts_1 = require("../asserts"); const config_1 = require("../config"); const error_1 = require("../error"); const generalLog_1 = require("../generalLog"); const getDurationWithUnits_1 = require("../getDurationWithUnits"); const log_1 = require("../log"); const object_1 = require("../object"); const promise_1 = require("../promise"); const selectors_1 = require("../selectors"); const typeGuards_1 = require("../typeGuards"); const valueToString_1 = require("../valueToString"); const getAssertionPromise_1 = require("./getAssertionPromise"); const additionalAssertionTimeoutInMs = 1_000; /** * Creates method of `Expect` class. * @internal */ const createExpectMethod = (key, getAssertionMessage) => // eslint-disable-next-line no-restricted-syntax function method(...args) { const { assertionTimeout } = (0, config_1.getFullPackConfig)(); const timeout = assertionTimeout + additionalAssertionTimeoutInMs; const assertionMessage = getAssertionMessage === undefined ? key : getAssertionMessage(...args); const message = `Assert: ${this.description}`; const selectorPropertyRetryData = this.actualValue?.[internal_1.RETRY_KEY]; const printedValue = (0, typeGuards_1.isThenable)(this.actualValue) ? '<Thenable>' : this.actualValue; const logEvent = (0, log_1.logAndGetLogEvent)(message, { actualValue: printedValue, assertion: (0, valueToString_1.wrapStringForLogs)(`value ${(0, valueToString_1.valueToString)(printedValue)} ${assertionMessage}`), assertionArguments: args, selector: selectorPropertyRetryData?.selector.description ?? (this.actualValue instanceof selectors_1.Selector ? this.actualValue.description : undefined), ...(selectorPropertyRetryData ? { selectorProperty: selectorPropertyRetryData.property, selectorPropertyArgs: selectorPropertyRetryData.args, } : undefined), }, 6 /* LogEventType.InternalAssert */); (0, asserts_1.assertValueIsDefined)(logEvent, 'logEvent is defined', { args, message, ...this }); const { payload } = logEvent; (0, asserts_1.assertValueIsDefined)(payload, 'payload is defined', { args, message, ...this }); const timeoutError = new error_1.E2edError(`"${key}" assertion promise rejected after ${(0, getDurationWithUnits_1.getDurationWithUnits)(timeout)} timeout`); const assertionPromise = (0, getAssertionPromise_1.getAssertionPromise)({ args, context: this, key: key, selectorPropertyRetryData, timeout, timeoutError, }); return assertionPromise.then(({ actualValue, additionalLogFields, error }) => { const additionalPayload = { ...additionalLogFields, error: error?.message === undefined ? undefined : (0, valueToString_1.removeStyleFromString)(error.message), logEventStatus: error ? "failed" /* LogEventStatus.Failed */ : "passed" /* LogEventStatus.Passed */, }; Object.assign(payload, additionalPayload); return (0, promise_1.addTimeoutToPromise)(Promise.resolve(actualValue), timeout, timeoutError) .then((value) => { Object.assign(payload, Object.assign(additionalPayload, { actualValue: value, assertion: (0, valueToString_1.wrapStringForLogs)(`value ${(0, valueToString_1.valueToString)(value)} ${assertionMessage}`), })); (0, object_1.setReadonlyProperty)(logEvent, 'endTime', Date.now()); }, (actualValueResolveError) => { Object.assign(payload, Object.assign(additionalPayload, { actualValueResolveError })); (0, object_1.setReadonlyProperty)(logEvent, 'endTime', Date.now()); }) .then(() => { (0, generalLog_1.generalLog)(`Assert "${this.description}" completed`, additionalPayload); if (error) { throw error; } }); }); }; exports.createExpectMethod = createExpectMethod;