UNPKG

just-api

Version:

Specification based API test framework for HTTP APIs (REST, GraphQL)

157 lines (126 loc) 4.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.INDICATORS = undefined; var _utils = require('./../utils'); var _prettyMs = require('pretty-ms'); var _prettyMs2 = _interopRequireDefault(_prettyMs); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const chalk = require('chalk'); const INDICATORS = exports.INDICATORS = { ok: '✓', err: '✖' }; class BaseReporter { constructor(launcher) { let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; try { this.startTime = process._api.startTime; } catch (err) { this.startTime = new Date(); } this.launcher = launcher; this.isParallelRun = opts.parallel; const self = this; launcher.on('start', function (suiteFiles) { self.suites = []; self.plannedSuites = suiteFiles.slice(0); }); launcher.on('end', function () { self.printSummary(); }); } addSuite(suite) { this.suites.push({ location: suite.file, status: null, tests: [], passedTestsCount: 0, failedTestsCount: 0, skippedTestsCount: 0, failures: [], error: null }); const self = this; suite.on('test pass', function (test) { let suite = self.getSuite(test.suite.file); suite.tests.push(test); suite.passedTestsCount += 1; }); suite.on('test fail', function (test, error) { let suite = self.getSuite(test.suite.file); suite.tests.push(test); suite.failedTestsCount += 1; suite.failures.push({ name: test.name, error: error, file: test.suite.file }); }); suite.on('test skip', function (test) { let suite = self.getSuite(test.suite.file); suite.tests.push(test); suite.skippedTestsCount += 1; }); suite.on('end', function (suiteObj, error) { let suiteResultObject = self.getSuite(suiteObj.file); suiteResultObject.status = suite.status; suiteResultObject.error = error || null; }); } getSuite(location) { return this.suites.find(function (suiteObj) { return suiteObj.location === location; }); } printSummary() { let failedSuitesCount = 0; let passedSuitesCount = 0; let skippedSuitesCount = 0; let passedTestsCount = 0; let failedTestsCount = 0; let skippedTestsCount = 0; let totalTestsCount = 0; for (let suite of this.suites) { if (suite.status === 'pass') { passedSuitesCount += 1; } else if (suite.status === 'skip') { skippedSuitesCount += 1; } else { failedSuitesCount += 1; } passedTestsCount += suite.passedTestsCount; failedTestsCount += suite.failedTestsCount; skippedTestsCount += suite.skippedTestsCount; totalTestsCount += suite.tests.length; } console.log(); console.log(chalk.cyan(`${skippedTestsCount} skipped, `) + chalk.red(`${failedTestsCount} failed, `) + chalk.green(`${passedTestsCount} passed `) + `(${totalTestsCount} tests)`); console.log(chalk.cyan(`${skippedSuitesCount} skipped, `) + chalk.red(`${failedSuitesCount} failed, `) + chalk.green(`${passedSuitesCount} passed `) + `(${this.plannedSuites.length} suites)`); this.endTime = new Date(); let duration = this.endTime.getTime() - this.startTime.getTime(); console.log(`Duration: ${(0, _prettyMs2.default)(duration)}`); if (failedTestsCount > 0 || failedSuitesCount > 0) { console.log('\nFailures:'); } this.logFailures(); } logFailures() { let count = 0; for (let suite of this.suites) { if (suite.error) { count++; console.log(); console.log(chalk.red(` ${count}) Suite failure: ${suite.location}`)); console.log(chalk.red(`${suite.error.stack}`)); } else { if (suite.failures.length) { for (let failure of suite.failures) { count++; console.log(); console.log(chalk.red(` ${count}) ${failure.name} (${failure.file})`)); console.log(chalk.red(`${failure.error.stack}`)); } } } } } } exports.default = BaseReporter;