799 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			799 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| Object.defineProperty(exports, '__esModule', {
 | |
|   value: true
 | |
| });
 | |
| exports.default = _default;
 | |
| 
 | |
| var _assert = require('assert');
 | |
| 
 | |
| var _chalk = _interopRequireDefault(require('chalk'));
 | |
| 
 | |
| var _jestMessageUtil = require('jest-message-util');
 | |
| 
 | |
| var _jestUtil = require('jest-util');
 | |
| 
 | |
| var _queueRunner = _interopRequireDefault(require('../queueRunner'));
 | |
| 
 | |
| var _treeProcessor = _interopRequireDefault(require('../treeProcessor'));
 | |
| 
 | |
| var _isError = _interopRequireDefault(require('../isError'));
 | |
| 
 | |
| var _assertionErrorMessage = _interopRequireDefault(
 | |
|   require('../assertionErrorMessage')
 | |
| );
 | |
| 
 | |
| 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);
 | |
|     });
 | |
|   };
 | |
| }
 | |
| 
 | |
| 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;
 | |
| }
 | |
| 
 | |
| function _default(j$) {
 | |
|   var _temp;
 | |
| 
 | |
|   return (
 | |
|     (_temp = class Env {
 | |
|       constructor(_options) {
 | |
|         _defineProperty(this, 'specFilter', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'catchExceptions', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'throwOnExpectationFailure', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'catchingExceptions', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'topSuite', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'fail', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'pending', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'afterAll', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'fit', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'throwingExpectationFailures', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'randomizeTests', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'randomTests', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'seed', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'execute', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'fdescribe', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'spyOn', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'beforeEach', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'afterEach', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'clearReporters', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'addReporter', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'it', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'xdescribe', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'xit', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'beforeAll', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'todo', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'provideFallbackReporter', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'allowRespy', void 0);
 | |
| 
 | |
|         _defineProperty(this, 'describe', void 0);
 | |
| 
 | |
|         let totalSpecsDefined = 0;
 | |
|         let catchExceptions = true;
 | |
|         const realSetTimeout = global.setTimeout;
 | |
|         const realClearTimeout = global.clearTimeout;
 | |
|         const runnableResources = {};
 | |
|         const currentlyExecutingSuites = [];
 | |
|         let currentSpec = null;
 | |
|         let throwOnExpectationFailure = false;
 | |
|         let random = false;
 | |
|         let seed = null;
 | |
|         let nextSpecId = 0;
 | |
|         let nextSuiteId = 0;
 | |
| 
 | |
|         const getNextSpecId = function getNextSpecId() {
 | |
|           return 'spec' + nextSpecId++;
 | |
|         };
 | |
| 
 | |
|         const getNextSuiteId = function getNextSuiteId() {
 | |
|           return 'suite' + nextSuiteId++;
 | |
|         };
 | |
| 
 | |
|         const topSuite = new j$.Suite({
 | |
|           id: getNextSuiteId(),
 | |
|           description: '',
 | |
| 
 | |
|           getTestPath() {
 | |
|             return j$.testPath;
 | |
|           }
 | |
|         });
 | |
|         let currentDeclarationSuite = topSuite;
 | |
| 
 | |
|         const currentSuite = function currentSuite() {
 | |
|           return currentlyExecutingSuites[currentlyExecutingSuites.length - 1];
 | |
|         };
 | |
| 
 | |
|         const currentRunnable = function currentRunnable() {
 | |
|           return currentSpec || currentSuite();
 | |
|         };
 | |
| 
 | |
|         const reporter = new j$.ReportDispatcher([
 | |
|           'jasmineStarted',
 | |
|           'jasmineDone',
 | |
|           'suiteStarted',
 | |
|           'suiteDone',
 | |
|           'specStarted',
 | |
|           'specDone'
 | |
|         ]);
 | |
| 
 | |
|         this.specFilter = function() {
 | |
|           return true;
 | |
|         };
 | |
| 
 | |
|         const defaultResourcesForRunnable = function defaultResourcesForRunnable(
 | |
|           id,
 | |
|           _parentRunnableId
 | |
|         ) {
 | |
|           const resources = {
 | |
|             spies: []
 | |
|           };
 | |
|           runnableResources[id] = resources;
 | |
|         };
 | |
| 
 | |
|         const clearResourcesForRunnable = function clearResourcesForRunnable(
 | |
|           id
 | |
|         ) {
 | |
|           spyRegistry.clearSpies();
 | |
|           delete runnableResources[id];
 | |
|         };
 | |
| 
 | |
|         const beforeAndAfterFns = function beforeAndAfterFns(suite) {
 | |
|           return function() {
 | |
|             let afters = [];
 | |
|             let befores = [];
 | |
| 
 | |
|             while (suite) {
 | |
|               befores = befores.concat(suite.beforeFns);
 | |
|               afters = afters.concat(suite.afterFns);
 | |
|               suite = suite.parentSuite;
 | |
|             }
 | |
| 
 | |
|             return {
 | |
|               befores: befores.reverse(),
 | |
|               afters
 | |
|             };
 | |
|           };
 | |
|         };
 | |
| 
 | |
|         const getSpecName = function getSpecName(spec, suite) {
 | |
|           const fullName = [spec.description];
 | |
|           const suiteFullName = suite.getFullName();
 | |
| 
 | |
|           if (suiteFullName !== '') {
 | |
|             fullName.unshift(suiteFullName);
 | |
|           }
 | |
| 
 | |
|           return fullName.join(' ');
 | |
|         };
 | |
| 
 | |
|         this.catchExceptions = function(value) {
 | |
|           catchExceptions = !!value;
 | |
|           return catchExceptions;
 | |
|         };
 | |
| 
 | |
|         this.catchingExceptions = function() {
 | |
|           return catchExceptions;
 | |
|         };
 | |
| 
 | |
|         this.throwOnExpectationFailure = function(value) {
 | |
|           throwOnExpectationFailure = !!value;
 | |
|         };
 | |
| 
 | |
|         this.throwingExpectationFailures = function() {
 | |
|           return throwOnExpectationFailure;
 | |
|         };
 | |
| 
 | |
|         this.randomizeTests = function(value) {
 | |
|           random = !!value;
 | |
|         };
 | |
| 
 | |
|         this.randomTests = function() {
 | |
|           return random;
 | |
|         };
 | |
| 
 | |
|         this.seed = function(value) {
 | |
|           if (value) {
 | |
|             seed = value;
 | |
|           }
 | |
| 
 | |
|           return seed;
 | |
|         };
 | |
| 
 | |
|         const queueRunnerFactory = options => {
 | |
|           options.clearTimeout = realClearTimeout;
 | |
|           options.fail = this.fail;
 | |
|           options.setTimeout = realSetTimeout;
 | |
|           return (0, _queueRunner.default)(options);
 | |
|         };
 | |
| 
 | |
|         this.topSuite = function() {
 | |
|           return topSuite;
 | |
|         };
 | |
| 
 | |
|         const uncaught = err => {
 | |
|           if (currentSpec) {
 | |
|             currentSpec.onException(err);
 | |
|             currentSpec.cancel();
 | |
|           } else {
 | |
|             console.error('Unhandled error');
 | |
|             console.error(err.stack);
 | |
|           }
 | |
|         };
 | |
| 
 | |
|         let oldListenersException;
 | |
|         let oldListenersRejection;
 | |
| 
 | |
|         const executionSetup = function executionSetup() {
 | |
|           // Need to ensure we are the only ones handling these exceptions.
 | |
|           oldListenersException = process
 | |
|             .listeners('uncaughtException')
 | |
|             .slice();
 | |
|           oldListenersRejection = process
 | |
|             .listeners('unhandledRejection')
 | |
|             .slice();
 | |
|           j$.process.removeAllListeners('uncaughtException');
 | |
|           j$.process.removeAllListeners('unhandledRejection');
 | |
|           j$.process.on('uncaughtException', uncaught);
 | |
|           j$.process.on('unhandledRejection', uncaught);
 | |
|         };
 | |
| 
 | |
|         const executionTeardown = function executionTeardown() {
 | |
|           j$.process.removeListener('uncaughtException', uncaught);
 | |
|           j$.process.removeListener('unhandledRejection', uncaught); // restore previous exception handlers
 | |
| 
 | |
|           oldListenersException.forEach(listener => {
 | |
|             j$.process.on('uncaughtException', listener);
 | |
|           });
 | |
|           oldListenersRejection.forEach(listener => {
 | |
|             j$.process.on('unhandledRejection', listener);
 | |
|           });
 | |
|         };
 | |
| 
 | |
|         this.execute =
 | |
|           /*#__PURE__*/
 | |
|           (function() {
 | |
|             var _ref = _asyncToGenerator(function*(
 | |
|               runnablesToRun,
 | |
|               suiteTree = topSuite
 | |
|             ) {
 | |
|               if (!runnablesToRun) {
 | |
|                 if (focusedRunnables.length) {
 | |
|                   runnablesToRun = focusedRunnables;
 | |
|                 } else {
 | |
|                   runnablesToRun = [suiteTree.id];
 | |
|                 }
 | |
|               }
 | |
| 
 | |
|               if (currentlyExecutingSuites.length === 0) {
 | |
|                 executionSetup();
 | |
|               }
 | |
| 
 | |
|               const lastDeclarationSuite = currentDeclarationSuite;
 | |
|               yield (0, _treeProcessor.default)({
 | |
|                 nodeComplete(suite) {
 | |
|                   if (!suite.disabled) {
 | |
|                     clearResourcesForRunnable(suite.id);
 | |
|                   }
 | |
| 
 | |
|                   currentlyExecutingSuites.pop();
 | |
| 
 | |
|                   if (suite === topSuite) {
 | |
|                     reporter.jasmineDone({
 | |
|                       failedExpectations: topSuite.result.failedExpectations
 | |
|                     });
 | |
|                   } else {
 | |
|                     reporter.suiteDone(suite.getResult());
 | |
|                   }
 | |
|                 },
 | |
| 
 | |
|                 nodeStart(suite) {
 | |
|                   currentlyExecutingSuites.push(suite);
 | |
|                   defaultResourcesForRunnable(
 | |
|                     suite.id,
 | |
|                     suite.parentSuite && suite.parentSuite.id
 | |
|                   );
 | |
| 
 | |
|                   if (suite === topSuite) {
 | |
|                     reporter.jasmineStarted({
 | |
|                       totalSpecsDefined
 | |
|                     });
 | |
|                   } else {
 | |
|                     reporter.suiteStarted(suite.result);
 | |
|                   }
 | |
|                 },
 | |
| 
 | |
|                 queueRunnerFactory,
 | |
|                 runnableIds: runnablesToRun,
 | |
|                 tree: suiteTree
 | |
|               });
 | |
|               currentDeclarationSuite = lastDeclarationSuite;
 | |
| 
 | |
|               if (currentlyExecutingSuites.length === 0) {
 | |
|                 executionTeardown();
 | |
|               }
 | |
|             });
 | |
| 
 | |
|             return function(_x) {
 | |
|               return _ref.apply(this, arguments);
 | |
|             };
 | |
|           })();
 | |
| 
 | |
|         this.addReporter = function(reporterToAdd) {
 | |
|           reporter.addReporter(reporterToAdd);
 | |
|         };
 | |
| 
 | |
|         this.provideFallbackReporter = function(reporterToAdd) {
 | |
|           reporter.provideFallbackReporter(reporterToAdd);
 | |
|         };
 | |
| 
 | |
|         this.clearReporters = function() {
 | |
|           reporter.clearReporters();
 | |
|         };
 | |
| 
 | |
|         const spyRegistry = new j$.SpyRegistry({
 | |
|           currentSpies() {
 | |
|             if (!currentRunnable()) {
 | |
|               throw new Error(
 | |
|                 'Spies must be created in a before function or a spec'
 | |
|               );
 | |
|             }
 | |
| 
 | |
|             return runnableResources[currentRunnable().id].spies;
 | |
|           }
 | |
|         });
 | |
| 
 | |
|         this.allowRespy = function(allow) {
 | |
|           spyRegistry.allowRespy(allow);
 | |
|         };
 | |
| 
 | |
|         this.spyOn = function(...args) {
 | |
|           return spyRegistry.spyOn.apply(spyRegistry, args);
 | |
|         };
 | |
| 
 | |
|         const suiteFactory = function suiteFactory(description) {
 | |
|           const suite = new j$.Suite({
 | |
|             id: getNextSuiteId(),
 | |
|             description,
 | |
|             parentSuite: currentDeclarationSuite,
 | |
|             throwOnExpectationFailure,
 | |
| 
 | |
|             getTestPath() {
 | |
|               return j$.testPath;
 | |
|             }
 | |
|           });
 | |
|           return suite;
 | |
|         };
 | |
| 
 | |
|         this.describe = function(description, specDefinitions) {
 | |
|           const suite = suiteFactory(description);
 | |
| 
 | |
|           if (specDefinitions === undefined) {
 | |
|             throw new Error(
 | |
|               `Missing second argument. It must be a callback function.`
 | |
|             );
 | |
|           }
 | |
| 
 | |
|           if (typeof specDefinitions !== 'function') {
 | |
|             throw new Error(
 | |
|               `Invalid second argument, ${specDefinitions}. It must be a callback function.`
 | |
|             );
 | |
|           }
 | |
| 
 | |
|           if (specDefinitions.length > 0) {
 | |
|             throw new Error('describe does not expect any arguments');
 | |
|           }
 | |
| 
 | |
|           if (currentDeclarationSuite.markedPending) {
 | |
|             suite.pend();
 | |
|           }
 | |
| 
 | |
|           if (currentDeclarationSuite.markedTodo) {
 | |
|             // @ts-ignore TODO Possible error: Suite does not have todo method
 | |
|             suite.todo();
 | |
|           }
 | |
| 
 | |
|           addSpecsToSuite(suite, specDefinitions);
 | |
|           return suite;
 | |
|         };
 | |
| 
 | |
|         this.xdescribe = function(description, specDefinitions) {
 | |
|           const suite = suiteFactory(description);
 | |
|           suite.pend();
 | |
|           addSpecsToSuite(suite, specDefinitions);
 | |
|           return suite;
 | |
|         };
 | |
| 
 | |
|         const focusedRunnables = [];
 | |
| 
 | |
|         this.fdescribe = function(description, specDefinitions) {
 | |
|           const suite = suiteFactory(description);
 | |
|           suite.isFocused = true;
 | |
|           focusedRunnables.push(suite.id);
 | |
|           unfocusAncestor();
 | |
|           addSpecsToSuite(suite, specDefinitions);
 | |
|           return suite;
 | |
|         };
 | |
| 
 | |
|         const addSpecsToSuite = (suite, specDefinitions) => {
 | |
|           const parentSuite = currentDeclarationSuite;
 | |
|           parentSuite.addChild(suite);
 | |
|           currentDeclarationSuite = suite;
 | |
|           let declarationError = undefined;
 | |
|           let describeReturnValue = undefined;
 | |
| 
 | |
|           try {
 | |
|             describeReturnValue = specDefinitions.call(suite);
 | |
|           } catch (e) {
 | |
|             declarationError = e;
 | |
|           } // TODO throw in Jest 25: declarationError = new Error
 | |
| 
 | |
|           if ((0, _jestUtil.isPromise)(describeReturnValue)) {
 | |
|             console.log(
 | |
|               (0, _jestMessageUtil.formatExecError)(
 | |
|                 new Error(
 | |
|                   _chalk.default.yellow(
 | |
|                     'Returning a Promise from "describe" is not supported. Tests must be defined synchronously.\n' +
 | |
|                       'Returning a value from "describe" will fail the test in a future version of Jest.'
 | |
|                   )
 | |
|                 ),
 | |
|                 {
 | |
|                   rootDir: '',
 | |
|                   testMatch: []
 | |
|                 },
 | |
|                 {
 | |
|                   noStackTrace: false
 | |
|                 }
 | |
|               )
 | |
|             );
 | |
|           } else if (describeReturnValue !== undefined) {
 | |
|             console.log(
 | |
|               (0, _jestMessageUtil.formatExecError)(
 | |
|                 new Error(
 | |
|                   _chalk.default.yellow(
 | |
|                     'A "describe" callback must not return a value.\n' +
 | |
|                       'Returning a value from "describe" will fail the test in a future version of Jest.'
 | |
|                   )
 | |
|                 ),
 | |
|                 {
 | |
|                   rootDir: '',
 | |
|                   testMatch: []
 | |
|                 },
 | |
|                 {
 | |
|                   noStackTrace: false
 | |
|                 }
 | |
|               )
 | |
|             );
 | |
|           }
 | |
| 
 | |
|           if (declarationError) {
 | |
|             this.it('encountered a declaration exception', () => {
 | |
|               throw declarationError;
 | |
|             });
 | |
|           }
 | |
| 
 | |
|           currentDeclarationSuite = parentSuite;
 | |
|         };
 | |
| 
 | |
|         function findFocusedAncestor(suite) {
 | |
|           while (suite) {
 | |
|             if (suite.isFocused) {
 | |
|               return suite.id;
 | |
|             }
 | |
| 
 | |
|             suite = suite.parentSuite;
 | |
|           }
 | |
| 
 | |
|           return null;
 | |
|         }
 | |
| 
 | |
|         function unfocusAncestor() {
 | |
|           const focusedAncestor = findFocusedAncestor(currentDeclarationSuite);
 | |
| 
 | |
|           if (focusedAncestor) {
 | |
|             for (let i = 0; i < focusedRunnables.length; i++) {
 | |
|               if (focusedRunnables[i] === focusedAncestor) {
 | |
|                 focusedRunnables.splice(i, 1);
 | |
|                 break;
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
| 
 | |
|         const specFactory = (description, fn, suite, timeout) => {
 | |
|           totalSpecsDefined++;
 | |
|           const spec = new j$.Spec({
 | |
|             id: getNextSpecId(),
 | |
|             beforeAndAfterFns: beforeAndAfterFns(suite),
 | |
|             resultCallback: specResultCallback,
 | |
| 
 | |
|             getSpecName(spec) {
 | |
|               return getSpecName(spec, suite);
 | |
|             },
 | |
| 
 | |
|             getTestPath() {
 | |
|               return j$.testPath;
 | |
|             },
 | |
| 
 | |
|             onStart: specStarted,
 | |
|             description,
 | |
|             queueRunnerFactory,
 | |
| 
 | |
|             userContext() {
 | |
|               return suite.clonedSharedUserContext();
 | |
|             },
 | |
| 
 | |
|             queueableFn: {
 | |
|               fn,
 | |
| 
 | |
|               timeout() {
 | |
|                 return timeout || j$._DEFAULT_TIMEOUT_INTERVAL;
 | |
|               }
 | |
|             },
 | |
|             throwOnExpectationFailure
 | |
|           });
 | |
| 
 | |
|           if (!this.specFilter(spec)) {
 | |
|             spec.disable();
 | |
|           }
 | |
| 
 | |
|           return spec;
 | |
| 
 | |
|           function specResultCallback(result) {
 | |
|             clearResourcesForRunnable(spec.id);
 | |
|             currentSpec = null;
 | |
|             reporter.specDone(result);
 | |
|           }
 | |
| 
 | |
|           function specStarted(spec) {
 | |
|             currentSpec = spec;
 | |
|             defaultResourcesForRunnable(spec.id, suite.id);
 | |
|             reporter.specStarted(spec.result);
 | |
|           }
 | |
|         };
 | |
| 
 | |
|         this.it = function(description, fn, timeout) {
 | |
|           if (typeof description !== 'string') {
 | |
|             throw new Error(
 | |
|               `Invalid first argument, ${description}. It must be a string.`
 | |
|             );
 | |
|           }
 | |
| 
 | |
|           if (fn === undefined) {
 | |
|             throw new Error(
 | |
|               'Missing second argument. It must be a callback function. Perhaps you want to use `test.todo` for a test placeholder.'
 | |
|             );
 | |
|           }
 | |
| 
 | |
|           if (typeof fn !== 'function') {
 | |
|             throw new Error(
 | |
|               `Invalid second argument, ${fn}. It must be a callback function.`
 | |
|             );
 | |
|           }
 | |
| 
 | |
|           const spec = specFactory(
 | |
|             description,
 | |
|             fn,
 | |
|             currentDeclarationSuite,
 | |
|             timeout
 | |
|           );
 | |
| 
 | |
|           if (currentDeclarationSuite.markedPending) {
 | |
|             spec.pend();
 | |
|           } // When a test is defined inside another, jasmine will not run it.
 | |
|           // This check throws an error to warn the user about the edge-case.
 | |
| 
 | |
|           if (currentSpec !== null) {
 | |
|             throw new Error(
 | |
|               'Tests cannot be nested. Test `' +
 | |
|                 spec.description +
 | |
|                 '` cannot run because it is nested within `' +
 | |
|                 currentSpec.description +
 | |
|                 '`.'
 | |
|             );
 | |
|           }
 | |
| 
 | |
|           currentDeclarationSuite.addChild(spec);
 | |
|           return spec;
 | |
|         };
 | |
| 
 | |
|         this.xit = function(...args) {
 | |
|           const spec = this.it.apply(this, args);
 | |
|           spec.pend('Temporarily disabled with xit');
 | |
|           return spec;
 | |
|         };
 | |
| 
 | |
|         this.todo = function() {
 | |
|           const description = arguments[0];
 | |
| 
 | |
|           if (arguments.length !== 1 || typeof description !== 'string') {
 | |
|             throw new _jestUtil.ErrorWithStack(
 | |
|               'Todo must be called with only a description.',
 | |
|               test.todo
 | |
|             );
 | |
|           }
 | |
| 
 | |
|           const spec = specFactory(
 | |
|             description,
 | |
|             () => {},
 | |
|             currentDeclarationSuite
 | |
|           );
 | |
|           spec.todo();
 | |
|           currentDeclarationSuite.addChild(spec);
 | |
|           return spec;
 | |
|         };
 | |
| 
 | |
|         this.fit = function(description, fn, timeout) {
 | |
|           const spec = specFactory(
 | |
|             description,
 | |
|             fn,
 | |
|             currentDeclarationSuite,
 | |
|             timeout
 | |
|           );
 | |
|           currentDeclarationSuite.addChild(spec);
 | |
|           focusedRunnables.push(spec.id);
 | |
|           unfocusAncestor();
 | |
|           return spec;
 | |
|         };
 | |
| 
 | |
|         this.beforeEach = function(beforeEachFunction, timeout) {
 | |
|           currentDeclarationSuite.beforeEach({
 | |
|             fn: beforeEachFunction,
 | |
| 
 | |
|             timeout() {
 | |
|               return timeout || j$._DEFAULT_TIMEOUT_INTERVAL;
 | |
|             }
 | |
|           });
 | |
|         };
 | |
| 
 | |
|         this.beforeAll = function(beforeAllFunction, timeout) {
 | |
|           currentDeclarationSuite.beforeAll({
 | |
|             fn: beforeAllFunction,
 | |
| 
 | |
|             timeout() {
 | |
|               return timeout || j$._DEFAULT_TIMEOUT_INTERVAL;
 | |
|             }
 | |
|           });
 | |
|         };
 | |
| 
 | |
|         this.afterEach = function(afterEachFunction, timeout) {
 | |
|           currentDeclarationSuite.afterEach({
 | |
|             fn: afterEachFunction,
 | |
| 
 | |
|             timeout() {
 | |
|               return timeout || j$._DEFAULT_TIMEOUT_INTERVAL;
 | |
|             }
 | |
|           });
 | |
|         };
 | |
| 
 | |
|         this.afterAll = function(afterAllFunction, timeout) {
 | |
|           currentDeclarationSuite.afterAll({
 | |
|             fn: afterAllFunction,
 | |
| 
 | |
|             timeout() {
 | |
|               return timeout || j$._DEFAULT_TIMEOUT_INTERVAL;
 | |
|             }
 | |
|           });
 | |
|         };
 | |
| 
 | |
|         this.pending = function(message) {
 | |
|           let fullMessage = j$.Spec.pendingSpecExceptionMessage;
 | |
| 
 | |
|           if (message) {
 | |
|             fullMessage += message;
 | |
|           }
 | |
| 
 | |
|           throw fullMessage;
 | |
|         };
 | |
| 
 | |
|         this.fail = function(error) {
 | |
|           let checkIsError;
 | |
|           let message;
 | |
| 
 | |
|           if (error instanceof _assert.AssertionError) {
 | |
|             checkIsError = false; // @ts-ignore TODO Possible error: j$.Spec does not have expand property
 | |
| 
 | |
|             message = (0, _assertionErrorMessage.default)(error, {
 | |
|               expand: j$.Spec.expand
 | |
|             });
 | |
|           } else {
 | |
|             const check = (0, _isError.default)(error);
 | |
|             checkIsError = check.isError;
 | |
|             message = check.message;
 | |
|           }
 | |
| 
 | |
|           const errorAsErrorObject = checkIsError ? error : new Error(message);
 | |
|           const runnable = currentRunnable();
 | |
| 
 | |
|           if (!runnable) {
 | |
|             errorAsErrorObject.message =
 | |
|               'Caught error after test environment was torn down\n\n' +
 | |
|               errorAsErrorObject.message;
 | |
|             throw errorAsErrorObject;
 | |
|           }
 | |
| 
 | |
|           runnable.addExpectationResult(false, {
 | |
|             matcherName: '',
 | |
|             passed: false,
 | |
|             expected: '',
 | |
|             actual: '',
 | |
|             message,
 | |
|             error: errorAsErrorObject
 | |
|           });
 | |
|         };
 | |
|       }
 | |
|     }),
 | |
|     _temp
 | |
|   );
 | |
| }
 |