index.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. 'use strict';
  2. let jasmine2 = (() => {
  3. var _ref = _asyncToGenerator(function* (globalConfig, config, environment, runtime, testPath) {
  4. const reporter = new _reporter2.default(globalConfig, config, environment, testPath);
  5. const jasmineFactory = runtime.requireInternalModule(JASMINE);
  6. const jasmine = jasmineFactory.create({
  7. process,
  8. testPath
  9. });
  10. const env = jasmine.getEnv();
  11. const jasmineInterface = jasmineFactory.interface(jasmine, env);
  12. Object.assign(environment.global, jasmineInterface);
  13. env.addReporter(jasmineInterface.jsApiReporter);
  14. // TODO: Remove config option if V8 exposes some way of getting location of caller
  15. // in a future version
  16. if (config.testLocationInResults === true) {
  17. const originalIt = environment.global.it;
  18. environment.global.it = function () {
  19. const stack = (0, _jestUtil.getCallsite)(1, runtime.getSourceMaps());
  20. const it = originalIt.apply(undefined, arguments);
  21. it.result.__callsite = stack;
  22. return it;
  23. };
  24. }
  25. (0, _jasmine_async.install)(environment.global);
  26. environment.global.test = environment.global.it;
  27. environment.global.it.only = environment.global.fit;
  28. environment.global.it.skip = environment.global.xit;
  29. environment.global.xtest = environment.global.xit;
  30. environment.global.describe.skip = environment.global.xdescribe;
  31. environment.global.describe.only = environment.global.fdescribe;
  32. if (config.timers === 'fake') {
  33. environment.fakeTimers.useFakeTimers();
  34. }
  35. env.beforeEach(function () {
  36. if (config.resetModules) {
  37. runtime.resetModules();
  38. }
  39. if (config.clearMocks) {
  40. runtime.clearAllMocks();
  41. }
  42. if (config.resetMocks) {
  43. runtime.resetAllMocks();
  44. if (config.timers === 'fake') {
  45. environment.fakeTimers.useFakeTimers();
  46. }
  47. }
  48. if (config.restoreMocks) {
  49. runtime.restoreAllMocks();
  50. }
  51. });
  52. env.addReporter(reporter);
  53. runtime.requireInternalModule(_path2.default.resolve(__dirname, './jest_expect.js')).default({
  54. expand: globalConfig.expand
  55. });
  56. const snapshotState = runtime.requireInternalModule(_path2.default.resolve(__dirname, './setup_jest_globals.js')).default({
  57. config,
  58. globalConfig,
  59. localRequire: runtime.requireModule.bind(runtime),
  60. testPath
  61. });
  62. if (config.setupTestFrameworkScriptFile) {
  63. runtime.requireModule(config.setupTestFrameworkScriptFile);
  64. }
  65. runtime.requireInternalModule(require.resolve('source-map-support'), 'source-map-support').install({
  66. environment: 'node',
  67. handleUncaughtExceptions: false,
  68. retrieveSourceMap: function (source) {
  69. const sourceMaps = runtime.getSourceMaps();
  70. const sourceMapSource = sourceMaps && sourceMaps[source];
  71. if (sourceMapSource) {
  72. try {
  73. return {
  74. map: JSON.parse(_gracefulFs2.default.readFileSync(sourceMapSource)),
  75. url: source
  76. };
  77. } catch (e) {}
  78. }
  79. return null;
  80. }
  81. });
  82. if (globalConfig.enabledTestsMap) {
  83. env.specFilter = function (spec) {
  84. const suiteMap = globalConfig.enabledTestsMap && globalConfig.enabledTestsMap[spec.result.testPath];
  85. return suiteMap && suiteMap[spec.result.fullName];
  86. };
  87. } else if (globalConfig.testNamePattern) {
  88. const testNameRegex = new RegExp(globalConfig.testNamePattern, 'i');
  89. env.specFilter = function (spec) {
  90. return testNameRegex.test(spec.getFullName());
  91. };
  92. }
  93. runtime.requireModule(testPath);
  94. yield env.execute();
  95. return reporter.getResults().then(function (results) {
  96. return addSnapshotData(results, snapshotState);
  97. });
  98. });
  99. return function jasmine2(_x, _x2, _x3, _x4, _x5) {
  100. return _ref.apply(this, arguments);
  101. };
  102. })();
  103. var _path = require('path');
  104. var _path2 = _interopRequireDefault(_path);
  105. var _gracefulFs = require('graceful-fs');
  106. var _gracefulFs2 = _interopRequireDefault(_gracefulFs);
  107. var _jestUtil = require('jest-util');
  108. var _reporter = require('./reporter');
  109. var _reporter2 = _interopRequireDefault(_reporter);
  110. var _jasmine_async = require('./jasmine_async');
  111. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  112. function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
  113. // eslint-disable-next-line import/no-extraneous-dependencies
  114. /**
  115. * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
  116. *
  117. * This source code is licensed under the MIT license found in the
  118. * LICENSE file in the root directory of this source tree.
  119. *
  120. *
  121. */
  122. const JASMINE = require.resolve('./jasmine/jasmine_light.js');
  123. const addSnapshotData = (results, snapshotState) => {
  124. results.testResults.forEach((_ref2) => {
  125. let fullName = _ref2.fullName,
  126. status = _ref2.status;
  127. if (status === 'pending' || status === 'failed') {
  128. // if test is skipped or failed, we don't want to mark
  129. // its snapshots as obsolete.
  130. snapshotState.markSnapshotsAsCheckedForTest(fullName);
  131. }
  132. });
  133. const uncheckedCount = snapshotState.getUncheckedCount();
  134. const uncheckedKeys = snapshotState.getUncheckedKeys();
  135. if (uncheckedCount) {
  136. snapshotState.removeUncheckedKeys();
  137. }
  138. const status = snapshotState.save();
  139. results.snapshot.fileDeleted = status.deleted;
  140. results.snapshot.added = snapshotState.added;
  141. results.snapshot.matched = snapshotState.matched;
  142. results.snapshot.unmatched = snapshotState.unmatched;
  143. results.snapshot.updated = snapshotState.updated;
  144. results.snapshot.unchecked = !status.deleted ? uncheckedCount : 0;
  145. // Copy the array to prevent memory leaks
  146. results.snapshot.uncheckedKeys = Array.from(uncheckedKeys);
  147. return results;
  148. };
  149. module.exports = jasmine2;