testcafe
Version:
Automated browser testing for the modern web development stack.
47 lines • 5.84 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const module_1 = __importDefault(require("module"));
const bootstrapper_1 = __importDefault(require("../runner/bootstrapper"));
const compiler_1 = __importDefault(require("../compiler"));
const cache_proxy_1 = __importDefault(require("./../compiler/test-file/cache-proxy"));
const originalRequire = module_1.default.prototype.require;
class LiveModeBootstrapper extends bootstrapper_1.default {
constructor(runner, browserConnectionGateway, messageBus) {
super({ browserConnectionGateway, messageBus });
this.runner = runner;
cache_proxy_1.default.preventCaching();
}
_getTests(id) {
this._mockRequire();
return super._getTests(id)
.then(result => {
this._restoreRequire();
return result;
})
.catch(err => {
this._restoreRequire();
compiler_1.default.cleanUp();
this.runner.setBootstrappingError(err);
});
}
_mockRequire() {
const controller = this.runner.controller;
// NODE: we replace the `require` method to add required files to watcher
module_1.default.prototype.require = function (filePath) {
const filename = module_1.default._resolveFilename(filePath, this, false);
if (path_1.default.isAbsolute(filename) || /^\.\.?[/\\]/.test(filename))
controller.addFileToWatches(filename);
return originalRequire.apply(this, arguments);
};
}
_restoreRequire() {
module_1.default.prototype.require = originalRequire;
}
}
exports.default = LiveModeBootstrapper;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpdmUvYm9vdHN0cmFwcGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLG9EQUE0QjtBQUM1QiwwRUFBa0Q7QUFDbEQsMkRBQW1DO0FBQ25DLHNGQUE2RDtBQUU3RCxNQUFNLGVBQWUsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7QUFFakQsTUFBTSxvQkFBcUIsU0FBUSxzQkFBWTtJQUMzQyxZQUFhLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxVQUFVO1FBQ3JELEtBQUssQ0FBQyxFQUFFLHdCQUF3QixFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIscUJBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUyxDQUFFLEVBQUU7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzthQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDWCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFFdkIsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBRXZCLGtCQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxZQUFZO1FBQ1IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFFMUMseUVBQXlFO1FBQ3pFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLFFBQVE7WUFDekMsTUFBTSxRQUFRLEdBQUcsZ0JBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRWhFLElBQUksY0FBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDekQsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRzFDLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELGVBQWU7UUFDWCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDO0lBQy9DLENBQUM7Q0FDSjtBQUVELGtCQUFlLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgTW9kdWxlIGZyb20gJ21vZHVsZSc7XG5pbXBvcnQgQm9vdHN0cmFwcGVyIGZyb20gJy4uL3J1bm5lci9ib290c3RyYXBwZXInO1xuaW1wb3J0IENvbXBpbGVyIGZyb20gJy4uL2NvbXBpbGVyJztcbmltcG9ydCBjYWNoZVByb3h5IGZyb20gJy4vLi4vY29tcGlsZXIvdGVzdC1maWxlL2NhY2hlLXByb3h5JztcblxuY29uc3Qgb3JpZ2luYWxSZXF1aXJlID0gTW9kdWxlLnByb3RvdHlwZS5yZXF1aXJlO1xuXG5jbGFzcyBMaXZlTW9kZUJvb3RzdHJhcHBlciBleHRlbmRzIEJvb3RzdHJhcHBlciB7XG4gICAgY29uc3RydWN0b3IgKHJ1bm5lciwgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LCBtZXNzYWdlQnVzKSB7XG4gICAgICAgIHN1cGVyKHsgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LCBtZXNzYWdlQnVzIH0pO1xuXG4gICAgICAgIHRoaXMucnVubmVyID0gcnVubmVyO1xuXG4gICAgICAgIGNhY2hlUHJveHkucHJldmVudENhY2hpbmcoKTtcbiAgICB9XG5cbiAgICBfZ2V0VGVzdHMgKGlkKSB7XG4gICAgICAgIHRoaXMuX21vY2tSZXF1aXJlKCk7XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLl9nZXRUZXN0cyhpZClcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzdG9yZVJlcXVpcmUoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzdG9yZVJlcXVpcmUoKTtcblxuICAgICAgICAgICAgICAgIENvbXBpbGVyLmNsZWFuVXAoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMucnVubmVyLnNldEJvb3RzdHJhcHBpbmdFcnJvcihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX21vY2tSZXF1aXJlICgpIHtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IHRoaXMucnVubmVyLmNvbnRyb2xsZXI7XG5cbiAgICAgICAgLy8gTk9ERTogd2UgcmVwbGFjZSB0aGUgYHJlcXVpcmVgIG1ldGhvZCB0byBhZGQgcmVxdWlyZWQgZmlsZXMgdG8gd2F0Y2hlclxuICAgICAgICBNb2R1bGUucHJvdG90eXBlLnJlcXVpcmUgPSBmdW5jdGlvbiAoZmlsZVBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUoZmlsZVBhdGgsIHRoaXMsIGZhbHNlKTtcblxuICAgICAgICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShmaWxlbmFtZSkgfHwgL15cXC5cXC4/Wy9cXFxcXS8udGVzdChmaWxlbmFtZSkpXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5hZGRGaWxlVG9XYXRjaGVzKGZpbGVuYW1lKTtcblxuXG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxSZXF1aXJlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX3Jlc3RvcmVSZXF1aXJlICgpIHtcbiAgICAgICAgTW9kdWxlLnByb3RvdHlwZS5yZXF1aXJlID0gb3JpZ2luYWxSZXF1aXJlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGl2ZU1vZGVCb290c3RyYXBwZXI7XG4iXX0=