index.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. 'use strict';
  2. var _path = _interopRequireDefault(require('path'));
  3. var _jestUtil = require('jest-util');
  4. var _each = _interopRequireDefault(require('./each'));
  5. var _errorOnPrivate = require('./errorOnPrivate');
  6. var _reporter = _interopRequireDefault(require('./reporter'));
  7. var _jasmineAsyncInstall = _interopRequireDefault(
  8. require('./jasmineAsyncInstall')
  9. );
  10. function _interopRequireDefault(obj) {
  11. return obj && obj.__esModule ? obj : {default: obj};
  12. }
  13. var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
  14. var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
  15. var Promise = global[Symbol.for('jest-native-promise')] || global.Promise;
  16. function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
  17. try {
  18. var info = gen[key](arg);
  19. var value = info.value;
  20. } catch (error) {
  21. reject(error);
  22. return;
  23. }
  24. if (info.done) {
  25. resolve(value);
  26. } else {
  27. Promise.resolve(value).then(_next, _throw);
  28. }
  29. }
  30. function _asyncToGenerator(fn) {
  31. return function() {
  32. var self = this,
  33. args = arguments;
  34. return new Promise(function(resolve, reject) {
  35. var gen = fn.apply(self, args);
  36. function _next(value) {
  37. asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value);
  38. }
  39. function _throw(err) {
  40. asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);
  41. }
  42. _next(undefined);
  43. });
  44. };
  45. }
  46. const JASMINE = require.resolve('./jasmine/jasmineLight');
  47. function jasmine2(_x, _x2, _x3, _x4, _x5) {
  48. return _jasmine.apply(this, arguments);
  49. }
  50. function _jasmine() {
  51. _jasmine = _asyncToGenerator(function*(
  52. globalConfig,
  53. config,
  54. environment,
  55. runtime,
  56. testPath
  57. ) {
  58. const reporter = new _reporter.default(globalConfig, config, testPath);
  59. const jasmineFactory = runtime.requireInternalModule(JASMINE);
  60. const jasmine = jasmineFactory.create({
  61. process,
  62. testPath,
  63. testTimeout: globalConfig.testTimeout
  64. });
  65. const env = jasmine.getEnv();
  66. const jasmineInterface = jasmineFactory.interface(jasmine, env);
  67. Object.assign(environment.global, jasmineInterface);
  68. env.addReporter(jasmineInterface.jsApiReporter); // TODO: Remove config option if V8 exposes some way of getting location of caller
  69. // in a future version
  70. if (config.testLocationInResults === true) {
  71. const originalIt = environment.global.it;
  72. environment.global.it = (...args) => {
  73. const stack = (0, _jestUtil.getCallsite)(1, runtime.getSourceMaps());
  74. const it = originalIt(...args); // @ts-ignore
  75. it.result.__callsite = stack;
  76. return it;
  77. };
  78. const originalXit = environment.global.xit;
  79. environment.global.xit = (...args) => {
  80. const stack = (0, _jestUtil.getCallsite)(1, runtime.getSourceMaps());
  81. const xit = originalXit(...args); // @ts-ignore
  82. xit.result.__callsite = stack;
  83. return xit;
  84. };
  85. const originalFit = environment.global.fit;
  86. environment.global.fit = (...args) => {
  87. const stack = (0, _jestUtil.getCallsite)(1, runtime.getSourceMaps());
  88. const fit = originalFit(...args); // @ts-ignore
  89. fit.result.__callsite = stack;
  90. return fit;
  91. };
  92. }
  93. (0, _jasmineAsyncInstall.default)(globalConfig, environment.global);
  94. (0, _each.default)(environment);
  95. environment.global.test = environment.global.it;
  96. environment.global.it.only = environment.global.fit;
  97. environment.global.it.todo = env.todo;
  98. environment.global.it.skip = environment.global.xit;
  99. environment.global.xtest = environment.global.xit;
  100. environment.global.describe.skip = environment.global.xdescribe;
  101. environment.global.describe.only = environment.global.fdescribe;
  102. if (config.timers === 'fake') {
  103. environment.fakeTimers.useFakeTimers();
  104. }
  105. env.beforeEach(() => {
  106. if (config.resetModules) {
  107. runtime.resetModules();
  108. }
  109. if (config.clearMocks) {
  110. runtime.clearAllMocks();
  111. }
  112. if (config.resetMocks) {
  113. runtime.resetAllMocks();
  114. if (config.timers === 'fake') {
  115. environment.fakeTimers.useFakeTimers();
  116. }
  117. }
  118. if (config.restoreMocks) {
  119. runtime.restoreAllMocks();
  120. }
  121. });
  122. env.addReporter(reporter);
  123. runtime
  124. .requireInternalModule(
  125. _path.default.resolve(__dirname, './jestExpect.js')
  126. )
  127. .default({
  128. expand: globalConfig.expand
  129. });
  130. if (globalConfig.errorOnDeprecated) {
  131. (0, _errorOnPrivate.installErrorOnPrivate)(environment.global);
  132. } else {
  133. Object.defineProperty(jasmine, 'DEFAULT_TIMEOUT_INTERVAL', {
  134. configurable: true,
  135. enumerable: true,
  136. get() {
  137. return this._DEFAULT_TIMEOUT_INTERVAL;
  138. },
  139. set(value) {
  140. this._DEFAULT_TIMEOUT_INTERVAL = value;
  141. }
  142. });
  143. }
  144. const snapshotState = runtime
  145. .requireInternalModule(
  146. _path.default.resolve(__dirname, './setup_jest_globals.js')
  147. )
  148. .default({
  149. config,
  150. globalConfig,
  151. localRequire: runtime.requireModule.bind(runtime),
  152. testPath
  153. });
  154. config.setupFilesAfterEnv.forEach(path => runtime.requireModule(path));
  155. if (globalConfig.enabledTestsMap) {
  156. env.specFilter = spec => {
  157. const suiteMap =
  158. globalConfig.enabledTestsMap &&
  159. globalConfig.enabledTestsMap[spec.result.testPath];
  160. return suiteMap && suiteMap[spec.result.fullName];
  161. };
  162. } else if (globalConfig.testNamePattern) {
  163. const testNameRegex = new RegExp(globalConfig.testNamePattern, 'i');
  164. env.specFilter = spec => testNameRegex.test(spec.getFullName());
  165. }
  166. runtime.requireModule(testPath);
  167. yield env.execute();
  168. const results = yield reporter.getResults();
  169. return addSnapshotData(results, snapshotState);
  170. });
  171. return _jasmine.apply(this, arguments);
  172. }
  173. const addSnapshotData = (results, snapshotState) => {
  174. results.testResults.forEach(({fullName, status}) => {
  175. if (status === 'pending' || status === 'failed') {
  176. // if test is skipped or failed, we don't want to mark
  177. // its snapshots as obsolete.
  178. snapshotState.markSnapshotsAsCheckedForTest(fullName);
  179. }
  180. });
  181. const uncheckedCount = snapshotState.getUncheckedCount();
  182. const uncheckedKeys = snapshotState.getUncheckedKeys();
  183. if (uncheckedCount) {
  184. snapshotState.removeUncheckedKeys();
  185. }
  186. const status = snapshotState.save();
  187. results.snapshot.fileDeleted = status.deleted;
  188. results.snapshot.added = snapshotState.added;
  189. results.snapshot.matched = snapshotState.matched;
  190. results.snapshot.unmatched = snapshotState.unmatched;
  191. results.snapshot.updated = snapshotState.updated;
  192. results.snapshot.unchecked = !status.deleted ? uncheckedCount : 0; // Copy the array to prevent memory leaks
  193. results.snapshot.uncheckedKeys = Array.from(uncheckedKeys);
  194. return results;
  195. }; // eslint-disable-next-line no-redeclare
  196. module.exports = jasmine2;