UNPKG

cybernaut

Version:

Reliable, automated web UI testing in BDD-style.

115 lines 3.38 kB
#!/usr/bin/env node "use strict"; function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const createDebug = require("debug"); const tap = require("tap"); const globby_1 = require("globby"); const config_1 = require("./config"); const predicate_1 = require("./core/predicate"); const utils_1 = require("./core/utils"); const test_1 = require("./selenium/test"); __export(require("./selenium")); const debug = createDebug('cybernaut:index'); // tslint:disable-next-line no-object-literal-type-assertion let config = {}; const configFilename = process.argv[2]; try { config = config_1.loadConfig(configFilename); } catch (e) { console.error(`\nError: Unable to load the config file: '${configFilename}'`); process.exit(1); } console.error('\nConfig:'); for (const key of Object.keys(config)) { console.error(` ${key}: ${utils_1.format(config[key])}`); } const configErrors = config_1.validate(config); if (configErrors.length > 0) { console.error(`\nError: Unable to validate the config file: '${configFilename}'`); for (const configError of configErrors) { console.error(' ' + configError); } process.exit(1); } class It { get should() { return new predicate_1.PredicateBuilder(); } } exports.It = It; exports.it = new It(); let onlyTask; const tasks = []; function createTask(name, implementation) { return () => { tap .test(name, { diagnostic: false, timeout: 0 }, (logger) => tslib_1.__awaiter(this, void 0, void 0, function* () { if (implementation) { yield test_1.run(implementation, logger, config); } })) .catch((error) => { tap.fail(error.message); }); }; } exports.test = ((name, implementation) => { tasks.push(createTask(name, implementation)); }); // tslint:disable-line no-any exports.test.only = (name, implementation) => { onlyTask = createTask(name, implementation); }; exports.test.skip = (name, implementation) => { tasks.push(() => { tap.test(name, { skip: true }).catch((error) => { tap.fail(error.message); }); }); }; exports.test.todo = (name) => { tasks.push(() => { tap.test(name, { todo: true }).catch((error) => { tap.fail(error.message); }); }); }; if (require.main !== module) { const packageName = require('../package.json').name; console.error(`\nError: Please run your tests only via ${packageName} CLI`); process.exit(1); } try { const { browserName } = config.capabilities; if (browserName === 'chrome') { debug('Load the chromedriver'); require('chromedriver'); } else if (browserName === 'firefox') { debug('Load the geckodriver'); require('geckodriver'); } for (const file of globby_1.sync(config.files, { nodir: true, realpath: true })) { debug('Load the test file:', file); require(file); } } catch (e) { console.error(`\nError: ${e.message}`); process.exit(1); } tap.jobs = config.concurrency; if (onlyTask) { debug('Run only one test'); onlyTask(); } else { for (const task of tasks) { task(); } } //# sourceMappingURL=index.js.map