182 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			182 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, '__esModule', { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.default = void 0; | ||
|  | 
 | ||
|  | var _jestMessageUtil = require('jest-message-util'); | ||
|  | 
 | ||
|  | var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol; | ||
|  | var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol; | ||
|  | var jestNow = global[Symbol.for('jest-native-now')] || global.Date.now; | ||
|  | var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol; | ||
|  | var Promise = global[Symbol.for('jest-native-promise')] || global.Promise; | ||
|  | 
 | ||
|  | 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; | ||
|  | } | ||
|  | 
 | ||
|  | class Jasmine2Reporter { | ||
|  |   constructor(globalConfig, config, testPath) { | ||
|  |     _defineProperty(this, '_testResults', void 0); | ||
|  | 
 | ||
|  |     _defineProperty(this, '_globalConfig', void 0); | ||
|  | 
 | ||
|  |     _defineProperty(this, '_config', void 0); | ||
|  | 
 | ||
|  |     _defineProperty(this, '_currentSuites', void 0); | ||
|  | 
 | ||
|  |     _defineProperty(this, '_resolve', void 0); | ||
|  | 
 | ||
|  |     _defineProperty(this, '_resultsPromise', void 0); | ||
|  | 
 | ||
|  |     _defineProperty(this, '_startTimes', void 0); | ||
|  | 
 | ||
|  |     _defineProperty(this, '_testPath', void 0); | ||
|  | 
 | ||
|  |     this._globalConfig = globalConfig; | ||
|  |     this._config = config; | ||
|  |     this._testPath = testPath; | ||
|  |     this._testResults = []; | ||
|  |     this._currentSuites = []; | ||
|  |     this._resolve = null; | ||
|  |     this._resultsPromise = new Promise(resolve => (this._resolve = resolve)); | ||
|  |     this._startTimes = new Map(); | ||
|  |   } | ||
|  | 
 | ||
|  |   jasmineStarted(_runDetails) {} | ||
|  | 
 | ||
|  |   specStarted(spec) { | ||
|  |     this._startTimes.set(spec.id, jestNow()); | ||
|  |   } | ||
|  | 
 | ||
|  |   specDone(result) { | ||
|  |     this._testResults.push( | ||
|  |       this._extractSpecResults(result, this._currentSuites.slice(0)) | ||
|  |     ); | ||
|  |   } | ||
|  | 
 | ||
|  |   suiteStarted(suite) { | ||
|  |     this._currentSuites.push(suite.description); | ||
|  |   } | ||
|  | 
 | ||
|  |   suiteDone(_result) { | ||
|  |     this._currentSuites.pop(); | ||
|  |   } | ||
|  | 
 | ||
|  |   jasmineDone(_runDetails) { | ||
|  |     let numFailingTests = 0; | ||
|  |     let numPassingTests = 0; | ||
|  |     let numPendingTests = 0; | ||
|  |     let numTodoTests = 0; | ||
|  |     const testResults = this._testResults; | ||
|  |     testResults.forEach(testResult => { | ||
|  |       if (testResult.status === 'failed') { | ||
|  |         numFailingTests++; | ||
|  |       } else if (testResult.status === 'pending') { | ||
|  |         numPendingTests++; | ||
|  |       } else if (testResult.status === 'todo') { | ||
|  |         numTodoTests++; | ||
|  |       } else { | ||
|  |         numPassingTests++; | ||
|  |       } | ||
|  |     }); | ||
|  |     const testResult = { | ||
|  |       console: null, | ||
|  |       failureMessage: (0, _jestMessageUtil.formatResultsErrors)( | ||
|  |         testResults, | ||
|  |         this._config, | ||
|  |         this._globalConfig, | ||
|  |         this._testPath | ||
|  |       ), | ||
|  |       numFailingTests, | ||
|  |       numPassingTests, | ||
|  |       numPendingTests, | ||
|  |       numTodoTests, | ||
|  |       perfStats: { | ||
|  |         end: 0, | ||
|  |         start: 0 | ||
|  |       }, | ||
|  |       snapshot: { | ||
|  |         added: 0, | ||
|  |         fileDeleted: false, | ||
|  |         matched: 0, | ||
|  |         unchecked: 0, | ||
|  |         unmatched: 0, | ||
|  |         updated: 0 | ||
|  |       }, | ||
|  |       testFilePath: this._testPath, | ||
|  |       testResults | ||
|  |     }; | ||
|  | 
 | ||
|  |     this._resolve(testResult); | ||
|  |   } | ||
|  | 
 | ||
|  |   getResults() { | ||
|  |     return this._resultsPromise; | ||
|  |   } | ||
|  | 
 | ||
|  |   _addMissingMessageToStack(stack, message) { | ||
|  |     // Some errors (e.g. Angular injection error) don't prepend error.message
 | ||
|  |     // to stack, instead the first line of the stack is just plain 'Error'
 | ||
|  |     const ERROR_REGEX = /^Error\s*\n/; | ||
|  | 
 | ||
|  |     if ( | ||
|  |       stack && | ||
|  |       message && | ||
|  |       ERROR_REGEX.test(stack) && | ||
|  |       stack.indexOf(message) === -1 | ||
|  |     ) { | ||
|  |       return message + stack.replace(ERROR_REGEX, '\n'); | ||
|  |     } | ||
|  | 
 | ||
|  |     return stack; | ||
|  |   } | ||
|  | 
 | ||
|  |   _extractSpecResults(specResult, ancestorTitles) { | ||
|  |     const start = this._startTimes.get(specResult.id); | ||
|  | 
 | ||
|  |     const duration = start ? jestNow() - start : undefined; | ||
|  |     const status = | ||
|  |       specResult.status === 'disabled' ? 'pending' : specResult.status; | ||
|  |     const location = specResult.__callsite | ||
|  |       ? { | ||
|  |           column: specResult.__callsite.getColumnNumber(), | ||
|  |           line: specResult.__callsite.getLineNumber() | ||
|  |         } | ||
|  |       : null; | ||
|  |     const results = { | ||
|  |       ancestorTitles, | ||
|  |       duration, | ||
|  |       failureMessages: [], | ||
|  |       fullName: specResult.fullName, | ||
|  |       location, | ||
|  |       numPassingAsserts: 0, | ||
|  |       // Jasmine2 only returns an array of failed asserts.
 | ||
|  |       status, | ||
|  |       title: specResult.description | ||
|  |     }; | ||
|  |     specResult.failedExpectations.forEach(failed => { | ||
|  |       const message = | ||
|  |         !failed.matcherName && failed.stack | ||
|  |           ? this._addMissingMessageToStack(failed.stack, failed.message) | ||
|  |           : failed.message || ''; | ||
|  |       results.failureMessages.push(message); | ||
|  |     }); | ||
|  |     return results; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | exports.default = Jasmine2Reporter; |