UNPKG

cybernaut

Version:

Reliable, zero configuration end-to-end testing in BDD-style.

101 lines 3.19 kB
#!/usr/bin/env node "use strict"; 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