237 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var _path = _interopRequireDefault(require('path'));
 | |
| 
 | |
| var _jestUtil = require('jest-util');
 | |
| 
 | |
| var _each = _interopRequireDefault(require('./each'));
 | |
| 
 | |
| var _errorOnPrivate = require('./errorOnPrivate');
 | |
| 
 | |
| var _reporter = _interopRequireDefault(require('./reporter'));
 | |
| 
 | |
| var _jasmineAsyncInstall = _interopRequireDefault(
 | |
|   require('./jasmineAsyncInstall')
 | |
| );
 | |
| 
 | |
| function _interopRequireDefault(obj) {
 | |
|   return obj && obj.__esModule ? obj : {default: obj};
 | |
| }
 | |
| 
 | |
| var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
 | |
| var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
 | |
| var Promise = global[Symbol.for('jest-native-promise')] || global.Promise;
 | |
| 
 | |
| function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
 | |
|   try {
 | |
|     var info = gen[key](arg);
 | |
|     var value = info.value;
 | |
|   } catch (error) {
 | |
|     reject(error);
 | |
|     return;
 | |
|   }
 | |
|   if (info.done) {
 | |
|     resolve(value);
 | |
|   } else {
 | |
|     Promise.resolve(value).then(_next, _throw);
 | |
|   }
 | |
| }
 | |
| 
 | |
| function _asyncToGenerator(fn) {
 | |
|   return function() {
 | |
|     var self = this,
 | |
|       args = arguments;
 | |
|     return new Promise(function(resolve, reject) {
 | |
|       var gen = fn.apply(self, args);
 | |
|       function _next(value) {
 | |
|         asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value);
 | |
|       }
 | |
|       function _throw(err) {
 | |
|         asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);
 | |
|       }
 | |
|       _next(undefined);
 | |
|     });
 | |
|   };
 | |
| }
 | |
| 
 | |
| const JASMINE = require.resolve('./jasmine/jasmineLight');
 | |
| 
 | |
| function jasmine2(_x, _x2, _x3, _x4, _x5) {
 | |
|   return _jasmine.apply(this, arguments);
 | |
| }
 | |
| 
 | |
| function _jasmine() {
 | |
|   _jasmine = _asyncToGenerator(function*(
 | |
|     globalConfig,
 | |
|     config,
 | |
|     environment,
 | |
|     runtime,
 | |
|     testPath
 | |
|   ) {
 | |
|     const reporter = new _reporter.default(globalConfig, config, testPath);
 | |
|     const jasmineFactory = runtime.requireInternalModule(JASMINE);
 | |
|     const jasmine = jasmineFactory.create({
 | |
|       process,
 | |
|       testPath
 | |
|     });
 | |
|     const env = jasmine.getEnv();
 | |
|     const jasmineInterface = jasmineFactory.interface(jasmine, env);
 | |
|     Object.assign(environment.global, jasmineInterface);
 | |
|     env.addReporter(jasmineInterface.jsApiReporter); // TODO: Remove config option if V8 exposes some way of getting location of caller
 | |
|     // in a future version
 | |
| 
 | |
|     if (config.testLocationInResults === true) {
 | |
|       const originalIt = environment.global.it;
 | |
| 
 | |
|       environment.global.it = (...args) => {
 | |
|         const stack = (0, _jestUtil.getCallsite)(1, runtime.getSourceMaps());
 | |
|         const it = originalIt(...args); // @ts-ignore
 | |
| 
 | |
|         it.result.__callsite = stack;
 | |
|         return it;
 | |
|       };
 | |
| 
 | |
|       const originalXit = environment.global.xit;
 | |
| 
 | |
|       environment.global.xit = (...args) => {
 | |
|         const stack = (0, _jestUtil.getCallsite)(1, runtime.getSourceMaps());
 | |
|         const xit = originalXit(...args); // @ts-ignore
 | |
| 
 | |
|         xit.result.__callsite = stack;
 | |
|         return xit;
 | |
|       };
 | |
| 
 | |
|       const originalFit = environment.global.fit;
 | |
| 
 | |
|       environment.global.fit = (...args) => {
 | |
|         const stack = (0, _jestUtil.getCallsite)(1, runtime.getSourceMaps());
 | |
|         const fit = originalFit(...args); // @ts-ignore
 | |
| 
 | |
|         fit.result.__callsite = stack;
 | |
|         return fit;
 | |
|       };
 | |
|     }
 | |
| 
 | |
|     (0, _jasmineAsyncInstall.default)(globalConfig, environment.global);
 | |
|     (0, _each.default)(environment);
 | |
|     environment.global.test = environment.global.it;
 | |
|     environment.global.it.only = environment.global.fit;
 | |
|     environment.global.it.todo = env.todo;
 | |
|     environment.global.it.skip = environment.global.xit;
 | |
|     environment.global.xtest = environment.global.xit;
 | |
|     environment.global.describe.skip = environment.global.xdescribe;
 | |
|     environment.global.describe.only = environment.global.fdescribe;
 | |
| 
 | |
|     if (config.timers === 'fake') {
 | |
|       environment.fakeTimers.useFakeTimers();
 | |
|     }
 | |
| 
 | |
|     env.beforeEach(() => {
 | |
|       if (config.resetModules) {
 | |
|         runtime.resetModules();
 | |
|       }
 | |
| 
 | |
|       if (config.clearMocks) {
 | |
|         runtime.clearAllMocks();
 | |
|       }
 | |
| 
 | |
|       if (config.resetMocks) {
 | |
|         runtime.resetAllMocks();
 | |
| 
 | |
|         if (config.timers === 'fake') {
 | |
|           environment.fakeTimers.useFakeTimers();
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       if (config.restoreMocks) {
 | |
|         runtime.restoreAllMocks();
 | |
|       }
 | |
|     });
 | |
|     env.addReporter(reporter);
 | |
|     runtime
 | |
|       .requireInternalModule(
 | |
|         _path.default.resolve(__dirname, './jestExpect.js')
 | |
|       )
 | |
|       .default({
 | |
|         expand: globalConfig.expand
 | |
|       });
 | |
| 
 | |
|     if (globalConfig.errorOnDeprecated) {
 | |
|       (0, _errorOnPrivate.installErrorOnPrivate)(environment.global);
 | |
|     } else {
 | |
|       Object.defineProperty(jasmine, 'DEFAULT_TIMEOUT_INTERVAL', {
 | |
|         configurable: true,
 | |
|         enumerable: true,
 | |
| 
 | |
|         get() {
 | |
|           return this._DEFAULT_TIMEOUT_INTERVAL;
 | |
|         },
 | |
| 
 | |
|         set(value) {
 | |
|           this._DEFAULT_TIMEOUT_INTERVAL = value;
 | |
|         }
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     const snapshotState = runtime
 | |
|       .requireInternalModule(
 | |
|         _path.default.resolve(__dirname, './setup_jest_globals.js')
 | |
|       )
 | |
|       .default({
 | |
|         config,
 | |
|         globalConfig,
 | |
|         localRequire: runtime.requireModule.bind(runtime),
 | |
|         testPath
 | |
|       });
 | |
|     config.setupFilesAfterEnv.forEach(path => runtime.requireModule(path));
 | |
| 
 | |
|     if (globalConfig.enabledTestsMap) {
 | |
|       env.specFilter = spec => {
 | |
|         const suiteMap =
 | |
|           globalConfig.enabledTestsMap &&
 | |
|           globalConfig.enabledTestsMap[spec.result.testPath];
 | |
|         return suiteMap && suiteMap[spec.result.fullName];
 | |
|       };
 | |
|     } else if (globalConfig.testNamePattern) {
 | |
|       const testNameRegex = new RegExp(globalConfig.testNamePattern, 'i');
 | |
| 
 | |
|       env.specFilter = spec => testNameRegex.test(spec.getFullName());
 | |
|     }
 | |
| 
 | |
|     runtime.requireModule(testPath);
 | |
|     yield env.execute();
 | |
|     const results = yield reporter.getResults();
 | |
|     return addSnapshotData(results, snapshotState);
 | |
|   });
 | |
|   return _jasmine.apply(this, arguments);
 | |
| }
 | |
| 
 | |
| const addSnapshotData = (results, snapshotState) => {
 | |
|   results.testResults.forEach(({fullName, status}) => {
 | |
|     if (status === 'pending' || status === 'failed') {
 | |
|       // if test is skipped or failed, we don't want to mark
 | |
|       // its snapshots as obsolete.
 | |
|       snapshotState.markSnapshotsAsCheckedForTest(fullName);
 | |
|     }
 | |
|   });
 | |
|   const uncheckedCount = snapshotState.getUncheckedCount();
 | |
|   const uncheckedKeys = snapshotState.getUncheckedKeys();
 | |
| 
 | |
|   if (uncheckedCount) {
 | |
|     snapshotState.removeUncheckedKeys();
 | |
|   }
 | |
| 
 | |
|   const status = snapshotState.save();
 | |
|   results.snapshot.fileDeleted = status.deleted;
 | |
|   results.snapshot.added = snapshotState.added;
 | |
|   results.snapshot.matched = snapshotState.matched;
 | |
|   results.snapshot.unmatched = snapshotState.unmatched;
 | |
|   results.snapshot.updated = snapshotState.updated;
 | |
|   results.snapshot.unchecked = !status.deleted ? uncheckedCount : 0; // Copy the array to prevent memory leaks
 | |
| 
 | |
|   results.snapshot.uncheckedKeys = Array.from(uncheckedKeys);
 | |
|   return results;
 | |
| }; // eslint-disable-next-line no-redeclare
 | |
| 
 | |
| module.exports = jasmine2;
 |