testcafe
Version:
Automated browser testing for the modern web development stack.
60 lines • 7.55 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const child_process_1 = require("child_process");
const path_1 = require("path");
const pinkie_1 = __importDefault(require("pinkie"));
const tree_kill_1 = __importDefault(require("tree-kill"));
const os_family_1 = __importDefault(require("os-family"));
const delay_1 = __importDefault(require("../utils/delay"));
const runtime_1 = require("../errors/runtime");
const types_1 = require("../errors/types");
const resolve_path_relatively_cwd_1 = __importDefault(require("../utils/resolve-path-relatively-cwd"));
const MODULES_BIN_DIR = resolve_path_relatively_cwd_1.default('./node_modules/.bin');
const ENV_PATH_KEY = (function () {
if (os_family_1.default.win) {
let pathKey = 'Path';
Object.keys(process.env).forEach(key => {
if (key.toLowerCase() === 'path')
pathKey = key;
});
return pathKey;
}
return 'PATH';
})();
class TestedApp {
constructor() {
this.process = null;
this.errorPromise = null;
this.killed = false;
}
async start(command, initDelay) {
this.errorPromise = new pinkie_1.default((resolve, reject) => {
const env = Object.assign({}, process.env);
const path = env[ENV_PATH_KEY] || '';
const pathParts = path.split(path_1.delimiter);
pathParts.unshift(MODULES_BIN_DIR);
env[ENV_PATH_KEY] = pathParts.join(path_1.delimiter);
this.process = child_process_1.exec(command, { env }, err => {
if (!this.killed && err) {
const message = err.stack || String(err);
reject(new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.testedAppFailedWithError, message));
}
});
});
await pinkie_1.default.race([
delay_1.default(initDelay),
this.errorPromise
]);
}
async kill() {
this.killed = true;
const killPromise = new pinkie_1.default(resolve => tree_kill_1.default(this.process.pid, 'SIGTERM', resolve));
await killPromise;
}
}
exports.default = TestedApp;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGVkLWFwcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXIvdGVzdGVkLWFwcC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlEQUFxQztBQUNyQywrQkFBa0Q7QUFDbEQsb0RBQTZCO0FBQzdCLDBEQUE2QjtBQUM3QiwwREFBMkI7QUFDM0IsMkRBQW1DO0FBQ25DLCtDQUFpRDtBQUNqRCwyQ0FBaUQ7QUFDakQsdUdBQTRFO0FBRTVFLE1BQU0sZUFBZSxHQUFHLHFDQUF3QixDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFeEUsTUFBTSxZQUFZLEdBQUcsQ0FBQztJQUNsQixJQUFJLG1CQUFFLENBQUMsR0FBRyxFQUFFO1FBQ1IsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBRXJCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNO2dCQUM1QixPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7S0FDbEI7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUMsRUFBRSxDQUFDO0FBR0wsTUFBcUIsU0FBUztJQUMxQjtRQUNJLElBQUksQ0FBQyxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQVMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFFLE9BQU8sRUFBRSxTQUFTO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxnQkFBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2hELE1BQU0sR0FBRyxHQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRCxNQUFNLElBQUksR0FBUSxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWEsQ0FBQyxDQUFDO1lBRTVDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFbkMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWEsQ0FBQyxDQUFDO1lBRWxELElBQUksQ0FBQyxPQUFPLEdBQUcsb0JBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFO29CQUNyQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFFekMsTUFBTSxDQUFDLElBQUksc0JBQVksQ0FBQyxzQkFBYyxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQzlFO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sZ0JBQU8sQ0FBQyxJQUFJLENBQUM7WUFDZixlQUFLLENBQUMsU0FBUyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxZQUFZO1NBQ3BCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBRW5CLE1BQU0sV0FBVyxHQUFHLElBQUksZ0JBQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFdkYsTUFBTSxXQUFXLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBdkNELDRCQXVDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGRlbGltaXRlciBhcyBwYXRoRGVsaW1pdGVyIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICdwaW5raWUnO1xuaW1wb3J0IGtpbGwgZnJvbSAndHJlZS1raWxsJztcbmltcG9ydCBPUyBmcm9tICdvcy1mYW1pbHknO1xuaW1wb3J0IGRlbGF5IGZyb20gJy4uL3V0aWxzL2RlbGF5JztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCByZXNvbHZlUGF0aFJlbGF0aXZlbHlDd2QgZnJvbSAnLi4vdXRpbHMvcmVzb2x2ZS1wYXRoLXJlbGF0aXZlbHktY3dkJztcblxuY29uc3QgTU9EVUxFU19CSU5fRElSID0gcmVzb2x2ZVBhdGhSZWxhdGl2ZWx5Q3dkKCcuL25vZGVfbW9kdWxlcy8uYmluJyk7XG5cbmNvbnN0IEVOVl9QQVRIX0tFWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKE9TLndpbikge1xuICAgICAgICBsZXQgcGF0aEtleSA9ICdQYXRoJztcblxuICAgICAgICBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAncGF0aCcpXG4gICAgICAgICAgICAgICAgcGF0aEtleSA9IGtleTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhdGhLZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdQQVRIJztcbn0pKCk7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdGVkQXBwIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHRoaXMucHJvY2VzcyAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5lcnJvclByb21pc2UgPSBudWxsO1xuICAgICAgICB0aGlzLmtpbGxlZCAgICAgICA9IGZhbHNlO1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0IChjb21tYW5kLCBpbml0RGVsYXkpIHtcbiAgICAgICAgdGhpcy5lcnJvclByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnYgICAgICAgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudik7XG4gICAgICAgICAgICBjb25zdCBwYXRoICAgICAgPSBlbnZbRU5WX1BBVEhfS0VZXSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHBhdGguc3BsaXQocGF0aERlbGltaXRlcik7XG5cbiAgICAgICAgICAgIHBhdGhQYXJ0cy51bnNoaWZ0KE1PRFVMRVNfQklOX0RJUik7XG5cbiAgICAgICAgICAgIGVudltFTlZfUEFUSF9LRVldID0gcGF0aFBhcnRzLmpvaW4ocGF0aERlbGltaXRlcik7XG5cbiAgICAgICAgICAgIHRoaXMucHJvY2VzcyA9IGV4ZWMoY29tbWFuZCwgeyBlbnYgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMua2lsbGVkICYmIGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyLnN0YWNrIHx8IFN0cmluZyhlcnIpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLnRlc3RlZEFwcEZhaWxlZFdpdGhFcnJvciwgbWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICAgICAgZGVsYXkoaW5pdERlbGF5KSxcbiAgICAgICAgICAgIHRoaXMuZXJyb3JQcm9taXNlXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIGFzeW5jIGtpbGwgKCkge1xuICAgICAgICB0aGlzLmtpbGxlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qga2lsbFByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGtpbGwodGhpcy5wcm9jZXNzLnBpZCwgJ1NJR1RFUk0nLCByZXNvbHZlKSk7XG5cbiAgICAgICAgYXdhaXQga2lsbFByb21pc2U7XG4gICAgfVxufVxuIl19