cybernaut
Version:
Reliable, automated web UI testing in BDD-style.
115 lines • 3.38 kB
JavaScript
;
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