UNPKG

skutter

Version:

Skutter: Opinionated BDD Browser based test framework

103 lines (102 loc) 4.8 kB
"use strict"; const chalk = require("chalk"); const Lazy = require("lazy.js"); const reporter_base_1 = require("./reporter-base"); const result_types_1 = require("../result-aggregator/result-types"); class SingleProcessConsoleReporter extends reporter_base_1.ReporterBase { constructor(featureInfoProvider) { super(); this.immediateLog = false; this.featureInfoProvider = featureInfoProvider; this.immediateLog = false; } selfUnregister(context) { return context.executorsCount > 1; } runStarting() { console.log(`Starting Test execution.`); } onFeatureSkipped(threadId, featureId) { let feature = this.featureInfoProvider.getFeature(featureId); console.log(`${chalk.gray(threadId.toString())} Skipping: FEATURE "${chalk.yellow(feature.title)}".`); } onScenarioSkipped(threadId, featureId, scenarioId) { let scenario = this.featureInfoProvider.getScenario(featureId, scenarioId); console.log(` ${chalk.gray(threadId.toString())} ${chalk.bgBlack("Skipping")} SCENARIO "${scenario.title}".`); } onFeatureStart(threadId, featureId) { let feature = this.featureInfoProvider.getFeature(featureId); console.log(`${chalk.gray(threadId.toString())} Starting: FEATURE "${chalk.yellow(feature.title)}".`); } ; onScenarioStart(threadId, featureId, scenarioId) { let scenario = this.featureInfoProvider.getScenario(featureId, scenarioId); console.log(` ${chalk.gray(threadId.toString())} Starting: SCENARIO "${chalk.yellow(scenario.title)}".`); } onBeforeStep(threadId, featureId, scenarioId, stepId) { let scenario = this.featureInfoProvider.getScenario(featureId, scenarioId); let stepResult = Lazy(scenario.steps).findWhere((step) => { return step.id === stepId; }); console.log(` ${chalk.gray(threadId.toString())} STEP "${chalk.yellow(stepResult.text)}".`); } onAfterStep(threadId, featureId, scenarioId, stepId, stepResult) { for (let log of stepResult.log) { console.log(`[${log.elapsed.toPrecision(5)}] ${log.message}`); } } onBeforeSubStep(threadId, featureId, scenarioId, stepId, title) { console.log(` ${chalk.gray(threadId.toString())} SUB-STEP "${chalk.yellow(title)}".`); } onAfterSubStep(threadId, featureId, scenarioId, stepId, stepResult) { for (let log of stepResult.log) { console.log(` [${log.elapsed.toPrecision(5)}] ${log.message}`); } } onScreenshotStep(threadId, featureId, scenarioId, stepId, screenshotFilename) { let scenario = this.featureInfoProvider.getScenario(featureId, scenarioId); console.log(` ${chalk.gray(threadId.toString())} ${chalk.bgBlack("Screenshotting")} "${scenario.title}".`); } ; onAfterScenario(threadId, featureId, scenarioId, duration, result, scenarioTeardownLog) { let scenario = this.featureInfoProvider.getScenario(featureId, scenarioId); let resultString = null; switch (result) { case result_types_1.ResultTypes.Failed: resultString = "Failed"; break; case result_types_1.ResultTypes.Errored: resultString = "Errored"; break; default: resultString = `Unknown status of ${result}`; break; } let scenarioResult = result === result_types_1.ResultTypes.Passed ? chalk.green("Passed") : chalk.red(resultString); let scenarioDuration = scenario.durationMiliseconds / 1000; console.log(` SCENARIO ${chalk.gray(threadId.toString())} ${scenarioResult} "${scenario.title}", Duration: ${chalk.bgCyan(scenarioDuration.toFixed(2).toString())}s.`); } ; onAfterFeature(threadId, featureId, duration, result, featureTeardownLog) { let feature = this.featureInfoProvider.getFeature(featureId); let featureResult = result === result_types_1.ResultTypes.Passed ? chalk.green("Passed") : chalk.red("Failed"); let durationSeconds = feature.durationMiliseconds / 1000; console.log(`FEATURE ${chalk.gray(threadId.toString())} ${featureResult} "${feature.title}", Duration: ${chalk.bgCyan(durationSeconds.toFixed(2).toString())}s.`); } ; onLog(threadId, message, params) { if (this.immediateLog) { if (params === undefined) { console.log(message); } else { console.log(message, params); } } } ; setLog(value) { console.log(`Setting immediate log on: ${value}.`); this.immediateLog = value; } ; } exports.SingleProcessConsoleReporter = SingleProcessConsoleReporter;