skutter
Version:
Skutter: Opinionated BDD Browser based test framework
103 lines (102 loc) • 4.8 kB
JavaScript
;
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;