cybernaut
Version:
Reliable, zero configuration end-to-end testing in BDD-style.
101 lines • 3.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const tap = require("tap");
const glob_1 = require("glob");
const selenium_webdriver_1 = require("selenium-webdriver");
exports.Key = selenium_webdriver_1.Key;
const util_1 = require("util");
const browser_1 = require("./browser");
exports.Browser = browser_1.Browser;
const config_1 = require("./config");
const element_1 = require("./element");
exports.Element = element_1.Element;
const implementation_1 = require("./implementation");
const predicate_1 = require("./predicate");
exports.PredicateBuilder = predicate_1.PredicateBuilder;
const test_1 = require("./test");
exports.Test = test_1.Test;
let config = {}; // tslint:disable-line no-any
const configFilename = process.argv[2];
try {
config = config_1.loadConfig(configFilename);
}
catch (e) {
console.error(`\nError: Unable to load config file '${configFilename}'`);
process.exit(1);
}
console.error('\nConfig:');
for (const key of Object.keys(config)) {
// tslint:disable-next-line no-any
const value = util_1.inspect(config[key], { breakLength: Infinity });
console.error(` ${key}: ${value}`);
}
const configErrors = config_1.validate(config);
if (configErrors.length > 0) {
console.error(`\nError: Unable to validate config file '${configFilename}'`);
for (const configError of configErrors) {
console.error(' ' + configError);
}
process.exit(1);
}
function defineElement(selector) {
return new element_1.Element(selector);
}
exports.defineElement = defineElement;
class It {
get should() {
return new predicate_1.PredicateBuilder();
}
}
exports.It = It;
exports.it = new It();
exports.browser = new browser_1.Browser(config.screenshotDirectory);
const tasks = [];
function test(name, implementation) {
tasks.push(() => {
// tslint:disable-next-line no-floating-promises
tap.test(name, {
diagnostic: false, timeout: 0, todo: !implementation
}, (t) => tslib_1.__awaiter(this, void 0, void 0, function* () {
if (implementation) {
yield implementation_1.execute(implementation, t, config);
}
})).catch((error) => {
tap.fail(error.message);
});
});
}
exports.test = test;
function skip(name, implementation) {
tasks.push(() => {
tap.test(name, { skip: true }); // tslint:disable-line no-floating-promises
});
}
exports.skip = skip;
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 {
for (const dependency of config.dependencies) {
require(dependency);
}
const filenames = glob_1.sync(config.include, {
ignore: config.exclude, nodir: true, realpath: true
});
for (const filename of filenames) {
require(filename);
}
}
catch (e) {
console.error(`\nError: ${e.message}`);
process.exit(1);
}
tap.jobs = config.concurrency;
for (const task of tasks) {
task();
}
//# sourceMappingURL=index.js.map