You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
226 lines
5.1 KiB
226 lines
5.1 KiB
'use strict'; |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = void 0; |
|
|
|
function _chalk() { |
|
const data = _interopRequireDefault(require('chalk')); |
|
|
|
_chalk = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
function _jestUtil() { |
|
const data = require('jest-util'); |
|
|
|
_jestUtil = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
var _DefaultReporter = _interopRequireDefault(require('./DefaultReporter')); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : {default: obj}; |
|
} |
|
|
|
function _defineProperty(obj, key, value) { |
|
if (key in obj) { |
|
Object.defineProperty(obj, key, { |
|
value: value, |
|
enumerable: true, |
|
configurable: true, |
|
writable: true |
|
}); |
|
} else { |
|
obj[key] = value; |
|
} |
|
return obj; |
|
} |
|
|
|
const {ICONS} = _jestUtil().specialChars; |
|
|
|
class VerboseReporter extends _DefaultReporter.default { |
|
constructor(globalConfig) { |
|
super(globalConfig); |
|
|
|
_defineProperty(this, '_globalConfig', void 0); |
|
|
|
this._globalConfig = globalConfig; |
|
} // Verbose mode is for debugging. Buffering of output is undesirable. |
|
// See https://github.com/facebook/jest/issues/8208 |
|
|
|
__wrapStdio(stream) { |
|
const write = stream.write.bind(stream); |
|
|
|
stream.write = chunk => { |
|
this.__clearStatus(); |
|
|
|
write(chunk); |
|
|
|
this.__printStatus(); |
|
|
|
return true; |
|
}; |
|
} |
|
|
|
static filterTestResults(testResults) { |
|
return testResults.filter(({status}) => status !== 'pending'); |
|
} |
|
|
|
static groupTestsBySuites(testResults) { |
|
const root = { |
|
suites: [], |
|
tests: [], |
|
title: '' |
|
}; |
|
testResults.forEach(testResult => { |
|
let targetSuite = root; // Find the target suite for this test, |
|
// creating nested suites as necessary. |
|
|
|
for (const title of testResult.ancestorTitles) { |
|
let matchingSuite = targetSuite.suites.find(s => s.title === title); |
|
|
|
if (!matchingSuite) { |
|
matchingSuite = { |
|
suites: [], |
|
tests: [], |
|
title |
|
}; |
|
targetSuite.suites.push(matchingSuite); |
|
} |
|
|
|
targetSuite = matchingSuite; |
|
} |
|
|
|
targetSuite.tests.push(testResult); |
|
}); |
|
return root; |
|
} |
|
|
|
onTestResult(test, result, aggregatedResults) { |
|
super.testFinished(test.context.config, result, aggregatedResults); |
|
|
|
if (!result.skipped) { |
|
this.printTestFileHeader( |
|
result.testFilePath, |
|
test.context.config, |
|
result |
|
); |
|
|
|
if (!result.testExecError && !result.skipped) { |
|
this._logTestResults(result.testResults); |
|
} |
|
|
|
this.printTestFileFailureMessage( |
|
result.testFilePath, |
|
test.context.config, |
|
result |
|
); |
|
} |
|
|
|
super.forceFlushBufferedOutput(); |
|
} |
|
|
|
_logTestResults(testResults) { |
|
this._logSuite(VerboseReporter.groupTestsBySuites(testResults), 0); |
|
|
|
this._logLine(); |
|
} |
|
|
|
_logSuite(suite, indentLevel) { |
|
if (suite.title) { |
|
this._logLine(suite.title, indentLevel); |
|
} |
|
|
|
this._logTests(suite.tests, indentLevel + 1); |
|
|
|
suite.suites.forEach(suite => this._logSuite(suite, indentLevel + 1)); |
|
} |
|
|
|
_getIcon(status) { |
|
if (status === 'failed') { |
|
return _chalk().default.red(ICONS.failed); |
|
} else if (status === 'pending') { |
|
return _chalk().default.yellow(ICONS.pending); |
|
} else if (status === 'todo') { |
|
return _chalk().default.magenta(ICONS.todo); |
|
} else { |
|
return _chalk().default.green(ICONS.success); |
|
} |
|
} |
|
|
|
_logTest(test, indentLevel) { |
|
const status = this._getIcon(test.status); |
|
|
|
const time = test.duration |
|
? ` (${(0, _jestUtil().formatTime)(Math.round(test.duration))})` |
|
: ''; |
|
|
|
this._logLine( |
|
status + ' ' + _chalk().default.dim(test.title + time), |
|
indentLevel |
|
); |
|
} |
|
|
|
_logTests(tests, indentLevel) { |
|
if (this._globalConfig.expand) { |
|
tests.forEach(test => this._logTest(test, indentLevel)); |
|
} else { |
|
const summedTests = tests.reduce( |
|
(result, test) => { |
|
if (test.status === 'pending') { |
|
result.pending.push(test); |
|
} else if (test.status === 'todo') { |
|
result.todo.push(test); |
|
} else { |
|
this._logTest(test, indentLevel); |
|
} |
|
|
|
return result; |
|
}, |
|
{ |
|
pending: [], |
|
todo: [] |
|
} |
|
); |
|
|
|
if (summedTests.pending.length > 0) { |
|
summedTests.pending.forEach(this._logTodoOrPendingTest(indentLevel)); |
|
} |
|
|
|
if (summedTests.todo.length > 0) { |
|
summedTests.todo.forEach(this._logTodoOrPendingTest(indentLevel)); |
|
} |
|
} |
|
} |
|
|
|
_logTodoOrPendingTest(indentLevel) { |
|
return test => { |
|
const printedTestStatus = |
|
test.status === 'pending' ? 'skipped' : test.status; |
|
|
|
const icon = this._getIcon(test.status); |
|
|
|
const text = _chalk().default.dim(`${printedTestStatus} ${test.title}`); |
|
|
|
this._logLine(`${icon} ${text}`, indentLevel); |
|
}; |
|
} |
|
|
|
_logLine(str, indentLevel) { |
|
const indentation = ' '.repeat(indentLevel || 0); |
|
this.log(indentation + (str || '')); |
|
} |
|
} |
|
|
|
exports.default = VerboseReporter; |
|
|
|
_defineProperty(VerboseReporter, 'filename', __filename);
|
|
|