skutter
Version:
Skutter: Opinionated BDD Browser based test framework
85 lines (84 loc) • 5.39 kB
JavaScript
;
const path = require("path");
const Lazy = require("lazy.js");
const chalk = require("chalk");
const orchestrator_1 = require("./framework/orchestrator/orchestrator");
const node_module_finder_1 = require("./framework/services/node-module-finder");
const version_reader_1 = require("./framework/services/version-reader");
const logger_1 = require("./framework/services/logger");
const file_checker_1 = require("./framework/services/file-checker");
const feature_provider_1 = require("./framework/services/feature-provider");
const config_validator_1 = require("./framework/services/config-validator");
const config_reader_1 = require("./framework/services/config-reader");
const single_process_console_reporter_1 = require("./framework/reporters/single-process-console-reporter");
const exit_code_reporter_1 = require("./framework/reporters/exit-code-reporter");
const feature_info_provider_1 = require("./framework/services/feature-info-provider");
const multi_process_overview_reporter_1 = require("./framework/reporters/multi-process-overview-reporter");
const run_totals_reporter_1 = require("./framework/reporters/run-totals-reporter");
const run_failures_reporter_1 = require("./framework/reporters/run-failures-reporter");
const exit_codes_1 = require("./framework/exit-codes");
const run_errors_reporter_1 = require("./framework/reporters/run-errors-reporter");
const run_data_reporter_1 = require("./framework/reporters/run-data-reporter");
function run() {
let logger = new logger_1.Logger();
let configReader = new config_reader_1.ConfigReader(logger);
let skutterVersion = version_reader_1.default();
logger.log(`${chalk.white("Skutter")} ${chalk.green("v." + skutterVersion)}`);
let configPath = process.cwd() + "\\skutter.config.js";
let config = null;
try {
config = configReader.read(configPath);
}
catch (exception) {
logger.log(`Unable to load configuration from path '${configPath}'.`);
logger.log(`Load exception: ${exception.message}`);
process.exit(exit_codes_1.ExitCodes.SkutterInitialisationFailure);
}
let configErrors = config_validator_1.ConfigValidator.validate(config);
if (configErrors && configErrors.length > 0) {
console.log("Following errors detected with configuration:");
Lazy(configErrors).each((error) => {
console.log(error);
});
process.exit(exit_codes_1.ExitCodes.SkutterInitialisationFailure);
}
let protractorConfigPath = process.cwd() + "\\protractor.config.js";
if (!file_checker_1.FileChecker.exists(protractorConfigPath)) {
logger.log(`Expected config to exist at '${configPath}' but it was not found or access was denied.`);
process.exit(exit_codes_1.ExitCodes.SkutterInitialisationFailure);
}
let protractorBootstrapFullPath = __dirname + "\\framework\\executor\\protractor-bootstrap.js";
if (!file_checker_1.FileChecker.exists(protractorBootstrapFullPath)) {
logger.log(`Expected protractor-bootstrap.js to exist at '${protractorBootstrapFullPath}' but it was not found or access was denied.`);
process.exit(exit_codes_1.ExitCodes.SkutterInitialisationFailure);
}
config.orchestrator.executor.fullLibraryPaths = Lazy(config.libraryPaths).map((libraryPath) => {
return process.cwd() + "/" + libraryPath;
}).toArray();
let seleniumServerJar = node_module_finder_1.NodeModuleFinder.find("selenium-server-standalone-jar/jar/selenium-server-standalone-2.53.1.jar");
let chromeDriverExe = node_module_finder_1.NodeModuleFinder.find("chromedriver/lib/chromedriver/chromedriver.exe");
let cwdToScriptRelativePrefix = path.relative(process.cwd(), __dirname);
let frameworkSpecRunner = cwdToScriptRelativePrefix + "/framework/executor/protractor-bootstrap.js";
if (!file_checker_1.FileChecker.exists(frameworkSpecRunner)) {
logger.log(`Protractor bootstrap script '${frameworkSpecRunner}' was not found or access was denied.`);
process.exit(exit_codes_1.ExitCodes.SkutterInitialisationFailure);
}
config.orchestrator.executor.protractor.configPath = protractorConfigPath;
config.orchestrator.executor.protractor.specs = protractorBootstrapFullPath;
config.orchestrator.executor.protractor.chromeDriver = chromeDriverExe;
config.orchestrator.executor.protractor.seleniumServerJar = seleniumServerJar;
let features = feature_provider_1.FeatureProvider.load(config.featuresRootPath);
let featureInfoProvider = new feature_info_provider_1.FeatureInfoProvider(features);
let reporters = [];
reporters.push(new multi_process_overview_reporter_1.MultiProcessOverviewReporter(featureInfoProvider));
reporters.push(new single_process_console_reporter_1.SingleProcessConsoleReporter(featureInfoProvider));
reporters.push(new run_failures_reporter_1.RunFailuresReporter());
reporters.push(new run_errors_reporter_1.RunErrorsReporter());
reporters.push(new run_totals_reporter_1.RunTotalsReporter());
reporters.push(new run_data_reporter_1.RunDataReporter(config.outputRootPath));
reporters.push(new exit_code_reporter_1.ExitCodeReporter());
let orchestrator = new orchestrator_1.Orchestrator(config.orchestrator);
orchestrator.start(features, reporters);
}
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = run;