UNPKG

testcafe

Version:

Automated browser testing for the modern web development stack.

89 lines 14.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const lodash_1 = require("lodash"); const testing_unit_1 = __importDefault(require("./testing-unit")); const unit_type_1 = __importDefault(require("./unit-type")); const type_assertions_1 = require("../../errors/runtime/type-assertions"); const handle_tag_args_1 = __importDefault(require("../../utils/handle-tag-args")); const wrap_test_function_1 = __importDefault(require("../wrap-test-function")); const assert_type_1 = __importDefault(require("../request-hooks/assert-type")); const assert_type_2 = __importDefault(require("../../custom-client-scripts/assert-type")); const option_names_1 = __importDefault(require("../../configuration/option-names")); const runtime_1 = require("../../errors/runtime"); const types_1 = require("../../errors/types"); const testcafe_hammerhead_1 = require("testcafe-hammerhead"); class Fixture extends testing_unit_1.default { constructor(testFile, baseUrl, returnApiOrigin = true) { const pageUrl = baseUrl || testcafe_hammerhead_1.SPECIAL_BLANK_PAGE; super(testFile, unit_type_1.default.fixture, pageUrl, baseUrl); this.path = testFile.filename; this.beforeEachFn = null; this.afterEachFn = null; this.beforeFn = null; this.afterFn = null; this.globalBeforeFn = null; this.globalAfterFn = null; this.disableConcurrency = false; if (returnApiOrigin) return this.apiOrigin; } static init({ testFile, baseUrl }) { return super.init(Fixture, testFile, baseUrl); } _add(name, ...rest) { name = (0, handle_tag_args_1.default)(name, rest); (0, type_assertions_1.assertType)(type_assertions_1.is.string, 'apiOrigin', 'The fixture name', name); this.name = name; this.testFile.currentFixture = this; return this.apiOrigin; } _disableConcurrency$getter() { this.disableConcurrency = true; return this.apiOrigin; } _before$(fn) { (0, type_assertions_1.assertType)(type_assertions_1.is.function, 'before', 'The fixture.before hook', fn); this.beforeFn = fn; return this.apiOrigin; } _after$(fn) { (0, type_assertions_1.assertType)(type_assertions_1.is.function, 'after', 'The fixture.after hook', fn); this.afterFn = fn; return this.apiOrigin; } _beforeEach$(fn) { (0, type_assertions_1.assertType)(type_assertions_1.is.function, 'beforeEach', 'The fixture.beforeEach hook', fn); this.beforeEachFn = (0, wrap_test_function_1.default)(fn); return this.apiOrigin; } _afterEach$(fn) { (0, type_assertions_1.assertType)(type_assertions_1.is.function, 'afterEach', 'The fixture.afterEach hook', fn); this.afterEachFn = (0, wrap_test_function_1.default)(fn); return this.apiOrigin; } _requestHooks$(...hooks) { if (this.apiMethodWasCalled.requestHooks) throw new runtime_1.APIError(option_names_1.default.requestHooks, types_1.RUNTIME_ERRORS.multipleAPIMethodCallForbidden, option_names_1.default.requestHooks); hooks = (0, lodash_1.flattenDeep)(hooks); (0, assert_type_1.default)(hooks); this.requestHooks = hooks; this.apiMethodWasCalled.requestHooks = true; return this.apiOrigin; } _clientScripts$(...scripts) { if (this.apiMethodWasCalled.clientScripts) throw new runtime_1.APIError(option_names_1.default.clientScripts, types_1.RUNTIME_ERRORS.multipleAPIMethodCallForbidden, option_names_1.default.clientScripts); scripts = (0, lodash_1.flattenDeep)(scripts); (0, assert_type_2.default)(scripts); this.clientScripts = scripts; this.apiMethodWasCalled.clientScripts = true; return this.apiOrigin; } } exports.default = Fixture; testing_unit_1.default.makeAPIListForChildClass(Fixture); module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvc3RydWN0dXJlL2ZpeHR1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBZ0Q7QUFDaEQsa0VBQXlDO0FBQ3pDLDREQUFtQztBQUNuQywwRUFBc0U7QUFDdEUsa0ZBQXdEO0FBQ3hELCtFQUFxRDtBQUNyRCwrRUFBaUU7QUFDakUsMEZBQTZFO0FBQzdFLG9GQUE0RDtBQUM1RCxrREFBZ0Q7QUFDaEQsOENBQW9EO0FBSXBELDZEQUF5RDtBQU96RCxNQUFxQixPQUFRLFNBQVEsc0JBQVc7SUFVNUMsWUFBb0IsUUFBa0IsRUFBRSxPQUFnQixFQUFFLGVBQWUsR0FBRyxJQUFJO1FBQzVFLE1BQU0sT0FBTyxHQUFHLE9BQU8sSUFBSSx3Q0FBa0IsQ0FBQztRQUU5QyxLQUFLLENBQUMsUUFBUSxFQUFFLG1CQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsSUFBSSxHQUFpQixRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQVMsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLEdBQVUsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQWEsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQWMsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQU8sSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQVEsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSxlQUFlO1lBQ2YsT0FBTyxJQUFJLENBQUMsU0FBK0IsQ0FBQztJQUNwRCxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQXNCO1FBQ3pELE9BQU8sS0FB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LHFCQUFzQixFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxhQUFhLEdBQXNCLE9BQU8sQ0FBQztRQUNoRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztDQUNKO0FBNUdELDBCQTRHQztBQUVELHNCQUFXLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbGF0dGVuRGVlcCBhcyBmbGF0dGVuIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBUZXN0aW5nVW5pdCBmcm9tICcuL3Rlc3RpbmctdW5pdCc7XG5pbXBvcnQgVW5pdFR5cGUgZnJvbSAnLi91bml0LXR5cGUnO1xuaW1wb3J0IHsgYXNzZXJ0VHlwZSwgaXMgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZS90eXBlLWFzc2VydGlvbnMnO1xuaW1wb3J0IGhhbmRsZVRhZ0FyZ3MgZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlLXRhZy1hcmdzJztcbmltcG9ydCB3cmFwVGVzdEZ1bmN0aW9uIGZyb20gJy4uL3dyYXAtdGVzdC1mdW5jdGlvbic7XG5pbXBvcnQgYXNzZXJ0UmVxdWVzdEhvb2tUeXBlIGZyb20gJy4uL3JlcXVlc3QtaG9va3MvYXNzZXJ0LXR5cGUnO1xuaW1wb3J0IGFzc2VydENsaWVudFNjcmlwdFR5cGUgZnJvbSAnLi4vLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2Fzc2VydC10eXBlJztcbmltcG9ydCBPUFRJT05fTkFNRVMgZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9vcHRpb24tbmFtZXMnO1xuaW1wb3J0IHsgQVBJRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgVGVzdEZpbGUgZnJvbSAnLi90ZXN0LWZpbGUnO1xuaW1wb3J0IFJlcXVlc3RIb29rIGZyb20gJy4uL3JlcXVlc3QtaG9va3MvaG9vayc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0SW5pdCBmcm9tICcuLi8uLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvY2xpZW50LXNjcmlwdC1pbml0JztcbmltcG9ydCB7IFNQRUNJQUxfQkxBTktfUEFHRSB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuXG5pbnRlcmZhY2UgRml4dHVyZUluaXRPcHRpb25zIHtcbiAgICBiYXNlVXJsPzogc3RyaW5nO1xuICAgIHRlc3RGaWxlOiBUZXN0RmlsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRml4dHVyZSBleHRlbmRzIFRlc3RpbmdVbml0IHtcbiAgICBwdWJsaWMgcGF0aDogc3RyaW5nO1xuICAgIHB1YmxpYyBkaXNhYmxlQ29uY3VycmVuY3k6IGJvb2xlYW47XG4gICAgcHVibGljIGJlZm9yZUVhY2hGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBhZnRlckVhY2hGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBiZWZvcmVGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBhZnRlckZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIGdsb2JhbEJlZm9yZUZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIGdsb2JhbEFmdGVyRm46IEZ1bmN0aW9uIHwgbnVsbDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAodGVzdEZpbGU6IFRlc3RGaWxlLCBiYXNlVXJsPzogc3RyaW5nLCByZXR1cm5BcGlPcmlnaW4gPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHBhZ2VVcmwgPSBiYXNlVXJsIHx8IFNQRUNJQUxfQkxBTktfUEFHRTtcblxuICAgICAgICBzdXBlcih0ZXN0RmlsZSwgVW5pdFR5cGUuZml4dHVyZSwgcGFnZVVybCwgYmFzZVVybCk7XG5cbiAgICAgICAgdGhpcy5wYXRoICAgICAgICAgICAgICAgPSB0ZXN0RmlsZS5maWxlbmFtZTtcbiAgICAgICAgdGhpcy5iZWZvcmVFYWNoRm4gICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmFmdGVyRWFjaEZuICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuYmVmb3JlRm4gICAgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5hZnRlckZuICAgICAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmdsb2JhbEJlZm9yZUZuICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuZ2xvYmFsQWZ0ZXJGbiAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29uY3VycmVuY3kgPSBmYWxzZTtcblxuICAgICAgICBpZiAocmV0dXJuQXBpT3JpZ2luKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luIGFzIHVua25vd24gYXMgRml4dHVyZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGluaXQgKHsgdGVzdEZpbGUsIGJhc2VVcmwgfTogRml4dHVyZUluaXRPcHRpb25zKTogRml4dHVyZSB7XG4gICAgICAgIHJldHVybiBzdXBlci5pbml0KEZpeHR1cmUsIHRlc3RGaWxlLCBiYXNlVXJsKSBhcyB1bmtub3duIGFzIEZpeHR1cmU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9hZGQgKG5hbWU6IHN0cmluZywgLi4ucmVzdDogdW5rbm93bltdKTogRnVuY3Rpb24ge1xuICAgICAgICBuYW1lID0gaGFuZGxlVGFnQXJncyhuYW1lLCByZXN0KTtcblxuICAgICAgICBhc3NlcnRUeXBlKGlzLnN0cmluZywgJ2FwaU9yaWdpbicsICdUaGUgZml4dHVyZSBuYW1lJywgbmFtZSk7XG5cbiAgICAgICAgdGhpcy5uYW1lICAgICAgICAgICAgICAgICAgICA9IG5hbWU7XG4gICAgICAgIHRoaXMudGVzdEZpbGUuY3VycmVudEZpeHR1cmUgPSB0aGlzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlQ29uY3VycmVuY3kkZ2V0dGVyICgpOiBGdW5jdGlvbiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbmN1cnJlbmN5ID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmVmb3JlJCAoZm46IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnYmVmb3JlJywgJ1RoZSBmaXh0dXJlLmJlZm9yZSBob29rJywgZm4pO1xuXG4gICAgICAgIHRoaXMuYmVmb3JlRm4gPSBmbjtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYWZ0ZXIkIChmbjogRnVuY3Rpb24pOiBGdW5jdGlvbiB7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuZnVuY3Rpb24sICdhZnRlcicsICdUaGUgZml4dHVyZS5hZnRlciBob29rJywgZm4pO1xuXG4gICAgICAgIHRoaXMuYWZ0ZXJGbiA9IGZuO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9iZWZvcmVFYWNoJCAoZm46IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnYmVmb3JlRWFjaCcsICdUaGUgZml4dHVyZS5iZWZvcmVFYWNoIGhvb2snLCBmbik7XG5cbiAgICAgICAgdGhpcy5iZWZvcmVFYWNoRm4gPSB3cmFwVGVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYWZ0ZXJFYWNoJCAoZm46IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnYWZ0ZXJFYWNoJywgJ1RoZSBmaXh0dXJlLmFmdGVyRWFjaCBob29rJywgZm4pO1xuXG4gICAgICAgIHRoaXMuYWZ0ZXJFYWNoRm4gPSB3cmFwVGVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVxdWVzdEhvb2tzJCAoLi4uaG9va3M6IFJlcXVlc3RIb29rW10pOiBGdW5jdGlvbiB7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5yZXF1ZXN0SG9va3MpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoT1BUSU9OX05BTUVTLnJlcXVlc3RIb29rcywgUlVOVElNRV9FUlJPUlMubXVsdGlwbGVBUElNZXRob2RDYWxsRm9yYmlkZGVuLCBPUFRJT05fTkFNRVMucmVxdWVzdEhvb2tzKTtcblxuICAgICAgICBob29rcyA9IGZsYXR0ZW4oaG9va3MpO1xuXG4gICAgICAgIGFzc2VydFJlcXVlc3RIb29rVHlwZShob29rcyk7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0SG9va3MgICAgICAgICAgICAgICAgICAgID0gaG9va3M7XG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLnJlcXVlc3RIb29rcyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NsaWVudFNjcmlwdHMkICguLi5zY3JpcHRzOiBDbGllbnRTY3JpcHRJbml0W10pOiBGdW5jdGlvbiB7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5jbGllbnRTY3JpcHRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKE9QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzLCBSVU5USU1FX0VSUk9SUy5tdWx0aXBsZUFQSU1ldGhvZENhbGxGb3JiaWRkZW4sIE9QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzKTtcblxuICAgICAgICBzY3JpcHRzID0gZmxhdHRlbihzY3JpcHRzKTtcblxuICAgICAgICBhc3NlcnRDbGllbnRTY3JpcHRUeXBlKHNjcmlwdHMpO1xuXG4gICAgICAgIHRoaXMuY2xpZW50U2NyaXB0cyAgICAgICAgICAgICAgICAgICAgPSBzY3JpcHRzO1xuICAgICAgICB0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5jbGllbnRTY3JpcHRzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxufVxuXG5UZXN0aW5nVW5pdC5tYWtlQVBJTGlzdEZvckNoaWxkQ2xhc3MoRml4dHVyZSk7XG4iXX0=