UNPKG

karma-brief-reporter

Version:

Reports test progress statistics and lists failures at the end of a Karma test run.

88 lines (67 loc) 2.15 kB
'use strict' const types = require('./types') const DataStore = function () { const data = [] this.getData = function () { return data } } DataStore.prototype.save = function (browser, result) { if (!result.success && !result.skipped && result.suite.length > 0) { const suite = this.findSuiteInResult(result) return this.saveResultToSuite(suite, browser, result) } } DataStore.prototype.saveResultToSuite = function (suite, browser, result) { suite.tests = (!suite.tests) ? [] : suite.tests const test = this.findTestByName(suite.tests, result.description) test.depth = suite.depth + 1 const browserInfo = this.findBrowserByName(test.browsers, browser.name) browserInfo.depth = test.depth + 1 if (result.log && result.log[0] !== null) { browserInfo.errors = result.log[0].split('\n') } return { suite, test, browser: browserInfo } } DataStore.prototype.findSuiteInResult = function (result) { let suite const self = this let searchArray = self.getData() result.suite.forEach(function (suiteName, i) { suite = self.findSuiteByName(searchArray, suiteName) suite.depth = i suite.suites = (!suite.suites) ? [] : suite.suites searchArray = suite.suites }) return suite } DataStore.prototype.findByName = function (arr, name, Constructor) { let it // Look through the array for an object with a // 'name' property that matches the 'name' arg arr.every(function (el) { if (el.name === name) { it = el return false } return true }) // If a matching object is not found, create a // new one and push it to the provided array if (!it) { it = new Constructor(name) arr.push(it) } // return the object return it } DataStore.prototype.findSuiteByName = function (arr, name) { return this.findByName(arr, name, types.Suite) } DataStore.prototype.findTestByName = function (arr, name) { return this.findByName(arr, name, types.Test) } DataStore.prototype.findBrowserByName = function (arr, name) { return this.findByName(arr, name, types.Browser) } exports.getInstance = function () { return new DataStore() }