Spaces:
Sleeping
Sleeping
| ; | |
| 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 _BaseReporter = _interopRequireDefault(require('./BaseReporter')); | |
| var _getResultHeader = _interopRequireDefault(require('./getResultHeader')); | |
| var _getSnapshotSummary = _interopRequireDefault( | |
| require('./getSnapshotSummary') | |
| ); | |
| var _utils = require('./utils'); | |
| 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 TEST_SUMMARY_THRESHOLD = 20; | |
| const NPM_EVENTS = new Set([ | |
| 'prepublish', | |
| 'publish', | |
| 'postpublish', | |
| 'preinstall', | |
| 'install', | |
| 'postinstall', | |
| 'preuninstall', | |
| 'uninstall', | |
| 'postuninstall', | |
| 'preversion', | |
| 'version', | |
| 'postversion', | |
| 'pretest', | |
| 'test', | |
| 'posttest', | |
| 'prestop', | |
| 'stop', | |
| 'poststop', | |
| 'prestart', | |
| 'start', | |
| 'poststart', | |
| 'prerestart', | |
| 'restart', | |
| 'postrestart' | |
| ]); | |
| const {npm_config_user_agent, npm_lifecycle_event, npm_lifecycle_script} = | |
| process.env; | |
| class SummaryReporter extends _BaseReporter.default { | |
| constructor(globalConfig) { | |
| super(); | |
| _defineProperty(this, '_estimatedTime', void 0); | |
| _defineProperty(this, '_globalConfig', void 0); | |
| this._globalConfig = globalConfig; | |
| this._estimatedTime = 0; | |
| } // If we write more than one character at a time it is possible that | |
| // Node.js exits in the middle of printing the result. This was first observed | |
| // in Node.js 0.10 and still persists in Node.js 6.7+. | |
| // Let's print the test failure summary character by character which is safer | |
| // when hundreds of tests are failing. | |
| _write(string) { | |
| for (let i = 0; i < string.length; i++) { | |
| process.stderr.write(string.charAt(i)); | |
| } | |
| } | |
| onRunStart(aggregatedResults, options) { | |
| super.onRunStart(aggregatedResults, options); | |
| this._estimatedTime = options.estimatedTime; | |
| } | |
| onRunComplete(contexts, aggregatedResults) { | |
| const {numTotalTestSuites, testResults, wasInterrupted} = aggregatedResults; | |
| if (numTotalTestSuites) { | |
| const lastResult = testResults[testResults.length - 1]; // Print a newline if the last test did not fail to line up newlines | |
| // similar to when an error would have been thrown in the test. | |
| if ( | |
| !this._globalConfig.verbose && | |
| lastResult && | |
| !lastResult.numFailingTests && | |
| !lastResult.testExecError | |
| ) { | |
| this.log(''); | |
| } | |
| this._printSummary(aggregatedResults, this._globalConfig); | |
| this._printSnapshotSummary( | |
| aggregatedResults.snapshot, | |
| this._globalConfig | |
| ); | |
| if (numTotalTestSuites) { | |
| let message = (0, _utils.getSummary)(aggregatedResults, { | |
| estimatedTime: this._estimatedTime | |
| }); | |
| if (!this._globalConfig.silent) { | |
| message += | |
| '\n' + | |
| (wasInterrupted | |
| ? _chalk().default.bold.red('Test run was interrupted.') | |
| : this._getTestSummary(contexts, this._globalConfig)); | |
| } | |
| this.log(message); | |
| } | |
| } | |
| } | |
| _printSnapshotSummary(snapshots, globalConfig) { | |
| if ( | |
| snapshots.added || | |
| snapshots.filesRemoved || | |
| snapshots.unchecked || | |
| snapshots.unmatched || | |
| snapshots.updated | |
| ) { | |
| let updateCommand; | |
| const event = npm_lifecycle_event || ''; | |
| const prefix = NPM_EVENTS.has(event) ? '' : 'run '; | |
| const isYarn = | |
| typeof npm_config_user_agent === 'string' && | |
| npm_config_user_agent.includes('yarn'); | |
| const client = isYarn ? 'yarn' : 'npm'; | |
| const scriptUsesJest = | |
| typeof npm_lifecycle_script === 'string' && | |
| npm_lifecycle_script.includes('jest'); | |
| if (globalConfig.watch || globalConfig.watchAll) { | |
| updateCommand = 'press `u`'; | |
| } else if (event && scriptUsesJest) { | |
| updateCommand = `run \`${ | |
| client + ' ' + prefix + event + (isYarn ? '' : ' --') | |
| } -u\``; | |
| } else { | |
| updateCommand = 're-run jest with `-u`'; | |
| } | |
| const snapshotSummary = (0, _getSnapshotSummary.default)( | |
| snapshots, | |
| globalConfig, | |
| updateCommand | |
| ); | |
| snapshotSummary.forEach(this.log); | |
| this.log(''); // print empty line | |
| } | |
| } | |
| _printSummary(aggregatedResults, globalConfig) { | |
| // If there were any failing tests and there was a large number of tests | |
| // executed, re-print the failing results at the end of execution output. | |
| const failedTests = aggregatedResults.numFailedTests; | |
| const runtimeErrors = aggregatedResults.numRuntimeErrorTestSuites; | |
| if ( | |
| failedTests + runtimeErrors > 0 && | |
| aggregatedResults.numTotalTestSuites > TEST_SUMMARY_THRESHOLD | |
| ) { | |
| this.log(_chalk().default.bold('Summary of all failing tests')); | |
| aggregatedResults.testResults.forEach(testResult => { | |
| const {failureMessage} = testResult; | |
| if (failureMessage) { | |
| this._write( | |
| (0, _getResultHeader.default)(testResult, globalConfig) + | |
| '\n' + | |
| failureMessage + | |
| '\n' | |
| ); | |
| } | |
| }); | |
| this.log(''); // print empty line | |
| } | |
| } | |
| _getTestSummary(contexts, globalConfig) { | |
| const getMatchingTestsInfo = () => { | |
| const prefix = globalConfig.findRelatedTests | |
| ? ' related to files matching ' | |
| : ' matching '; | |
| return ( | |
| _chalk().default.dim(prefix) + | |
| (0, _jestUtil().testPathPatternToRegExp)( | |
| globalConfig.testPathPattern | |
| ).toString() | |
| ); | |
| }; | |
| let testInfo = ''; | |
| if (globalConfig.runTestsByPath) { | |
| testInfo = _chalk().default.dim(' within paths'); | |
| } else if (globalConfig.onlyChanged) { | |
| testInfo = _chalk().default.dim(' related to changed files'); | |
| } else if (globalConfig.testPathPattern) { | |
| testInfo = getMatchingTestsInfo(); | |
| } | |
| let nameInfo = ''; | |
| if (globalConfig.runTestsByPath) { | |
| nameInfo = ' ' + globalConfig.nonFlagArgs.map(p => `"${p}"`).join(', '); | |
| } else if (globalConfig.testNamePattern) { | |
| nameInfo = | |
| _chalk().default.dim(' with tests matching ') + | |
| `"${globalConfig.testNamePattern}"`; | |
| } | |
| const contextInfo = | |
| contexts.size > 1 | |
| ? _chalk().default.dim(' in ') + | |
| contexts.size + | |
| _chalk().default.dim(' projects') | |
| : ''; | |
| return ( | |
| _chalk().default.dim('Ran all test suites') + | |
| testInfo + | |
| nameInfo + | |
| contextInfo + | |
| _chalk().default.dim('.') | |
| ); | |
| } | |
| } | |
| exports.default = SummaryReporter; | |
| _defineProperty(SummaryReporter, 'filename', __filename); | |