224 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| Object.defineProperty(exports, '__esModule', {
 | |
|   value: true
 | |
| });
 | |
| exports.default = exports.test = exports.it = exports.describe = exports.beforeEach = exports.beforeAll = exports.afterEach = exports.afterAll = void 0;
 | |
| 
 | |
| var _chalk = _interopRequireDefault(require('chalk'));
 | |
| 
 | |
| var _jestEach = require('jest-each');
 | |
| 
 | |
| var _jestMessageUtil = require('jest-message-util');
 | |
| 
 | |
| var _jestUtil = require('jest-util');
 | |
| 
 | |
| var _state = require('./state');
 | |
| 
 | |
| function _interopRequireDefault(obj) {
 | |
|   return obj && obj.__esModule ? obj : {default: obj};
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
 | |
|  *
 | |
|  * This source code is licensed under the MIT license found in the
 | |
|  * LICENSE file in the root directory of this source tree.
 | |
|  */
 | |
| const describe = (() => {
 | |
|   const describe = (blockName, blockFn) =>
 | |
|     _dispatchDescribe(blockFn, blockName, describe);
 | |
| 
 | |
|   const only = (blockName, blockFn) =>
 | |
|     _dispatchDescribe(blockFn, blockName, only, 'only');
 | |
| 
 | |
|   const skip = (blockName, blockFn) =>
 | |
|     _dispatchDescribe(blockFn, blockName, skip, 'skip');
 | |
| 
 | |
|   describe.each = (0, _jestEach.bind)(describe, false);
 | |
|   only.each = (0, _jestEach.bind)(only, false);
 | |
|   skip.each = (0, _jestEach.bind)(skip, false);
 | |
|   describe.only = only;
 | |
|   describe.skip = skip;
 | |
|   return describe;
 | |
| })();
 | |
| 
 | |
| exports.describe = describe;
 | |
| 
 | |
| const _dispatchDescribe = (blockFn, blockName, describeFn, mode) => {
 | |
|   const asyncError = new _jestUtil.ErrorWithStack(undefined, describeFn);
 | |
| 
 | |
|   if (blockFn === undefined) {
 | |
|     asyncError.message = `Missing second argument. It must be a callback function.`;
 | |
|     throw asyncError;
 | |
|   }
 | |
| 
 | |
|   if (typeof blockFn !== 'function') {
 | |
|     asyncError.message = `Invalid second argument, ${blockFn}. It must be a callback function.`;
 | |
|     throw asyncError;
 | |
|   }
 | |
| 
 | |
|   (0, _state.dispatch)({
 | |
|     asyncError,
 | |
|     blockName,
 | |
|     mode,
 | |
|     name: 'start_describe_definition'
 | |
|   });
 | |
|   const describeReturn = blockFn(); // TODO throw in Jest 25
 | |
| 
 | |
|   if ((0, _jestUtil.isPromise)(describeReturn)) {
 | |
|     console.log(
 | |
|       (0, _jestMessageUtil.formatExecError)(
 | |
|         new _jestUtil.ErrorWithStack(
 | |
|           _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.'
 | |
|           ),
 | |
|           describeFn
 | |
|         ),
 | |
|         {
 | |
|           rootDir: '',
 | |
|           testMatch: []
 | |
|         },
 | |
|         {
 | |
|           noStackTrace: false
 | |
|         }
 | |
|       )
 | |
|     );
 | |
|   } else if (describeReturn !== undefined) {
 | |
|     console.log(
 | |
|       (0, _jestMessageUtil.formatExecError)(
 | |
|         new _jestUtil.ErrorWithStack(
 | |
|           _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.'
 | |
|           ),
 | |
|           describeFn
 | |
|         ),
 | |
|         {
 | |
|           rootDir: '',
 | |
|           testMatch: []
 | |
|         },
 | |
|         {
 | |
|           noStackTrace: false
 | |
|         }
 | |
|       )
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   (0, _state.dispatch)({
 | |
|     blockName,
 | |
|     mode,
 | |
|     name: 'finish_describe_definition'
 | |
|   });
 | |
| };
 | |
| 
 | |
| const _addHook = (fn, hookType, hookFn, timeout) => {
 | |
|   const asyncError = new _jestUtil.ErrorWithStack(undefined, hookFn);
 | |
| 
 | |
|   if (typeof fn !== 'function') {
 | |
|     asyncError.message =
 | |
|       'Invalid first argument. It must be a callback function.';
 | |
|     throw asyncError;
 | |
|   }
 | |
| 
 | |
|   (0, _state.dispatch)({
 | |
|     asyncError,
 | |
|     fn,
 | |
|     hookType,
 | |
|     name: 'add_hook',
 | |
|     timeout
 | |
|   });
 | |
| }; // Hooks have to pass themselves to the HOF in order for us to trim stack traces.
 | |
| 
 | |
| const beforeEach = (fn, timeout) =>
 | |
|   _addHook(fn, 'beforeEach', beforeEach, timeout);
 | |
| 
 | |
| exports.beforeEach = beforeEach;
 | |
| 
 | |
| const beforeAll = (fn, timeout) =>
 | |
|   _addHook(fn, 'beforeAll', beforeAll, timeout);
 | |
| 
 | |
| exports.beforeAll = beforeAll;
 | |
| 
 | |
| const afterEach = (fn, timeout) =>
 | |
|   _addHook(fn, 'afterEach', afterEach, timeout);
 | |
| 
 | |
| exports.afterEach = afterEach;
 | |
| 
 | |
| const afterAll = (fn, timeout) => _addHook(fn, 'afterAll', afterAll, timeout);
 | |
| 
 | |
| exports.afterAll = afterAll;
 | |
| 
 | |
| const test = (() => {
 | |
|   const test = (testName, fn, timeout) =>
 | |
|     _addTest(testName, undefined, fn, test, timeout);
 | |
| 
 | |
|   const skip = (testName, fn, timeout) =>
 | |
|     _addTest(testName, 'skip', fn, skip, timeout);
 | |
| 
 | |
|   const only = (testName, fn, timeout) =>
 | |
|     _addTest(testName, 'only', fn, test.only, timeout);
 | |
| 
 | |
|   test.todo = (testName, ...rest) => {
 | |
|     if (rest.length > 0 || typeof testName !== 'string') {
 | |
|       throw new _jestUtil.ErrorWithStack(
 | |
|         'Todo must be called with only a description.',
 | |
|         test.todo
 | |
|       );
 | |
|     }
 | |
| 
 | |
|     return _addTest(testName, 'todo', () => {}, test.todo);
 | |
|   };
 | |
| 
 | |
|   const _addTest = (testName, mode, fn, testFn, timeout) => {
 | |
|     const asyncError = new _jestUtil.ErrorWithStack(undefined, testFn);
 | |
| 
 | |
|     if (typeof testName !== 'string') {
 | |
|       asyncError.message = `Invalid first argument, ${testName}. It must be a string.`;
 | |
|       throw asyncError;
 | |
|     }
 | |
| 
 | |
|     if (fn === undefined) {
 | |
|       asyncError.message =
 | |
|         'Missing second argument. It must be a callback function. Perhaps you want to use `test.todo` for a test placeholder.';
 | |
|       throw asyncError;
 | |
|     }
 | |
| 
 | |
|     if (typeof fn !== 'function') {
 | |
|       asyncError.message = `Invalid second argument, ${fn}. It must be a callback function.`;
 | |
|       throw asyncError;
 | |
|     }
 | |
| 
 | |
|     return (0, _state.dispatch)({
 | |
|       asyncError,
 | |
|       fn,
 | |
|       mode,
 | |
|       name: 'add_test',
 | |
|       testName,
 | |
|       timeout
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   test.each = (0, _jestEach.bind)(test);
 | |
|   only.each = (0, _jestEach.bind)(only);
 | |
|   skip.each = (0, _jestEach.bind)(skip);
 | |
|   test.only = only;
 | |
|   test.skip = skip;
 | |
|   return test;
 | |
| })();
 | |
| 
 | |
| exports.test = test;
 | |
| const it = test;
 | |
| exports.it = it;
 | |
| var _default = {
 | |
|   afterAll,
 | |
|   afterEach,
 | |
|   beforeAll,
 | |
|   beforeEach,
 | |
|   describe,
 | |
|   it,
 | |
|   test
 | |
| };
 | |
| exports.default = _default;
 |