@modern-js/plugin-testing 2.0.0-beta.0 → 2.0.0-beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/js/modern/base/config/index.js +1 -3
  3. package/dist/js/modern/base/config/patches/index.js +0 -2
  4. package/dist/js/modern/base/config/patches/transformer.js +1 -7
  5. package/dist/js/modern/base/config/resolver.js +0 -3
  6. package/dist/js/modern/base/config/testConfigOperator.js +0 -23
  7. package/dist/js/modern/base/config/transformer/babelTransformer.js +0 -1
  8. package/dist/js/modern/base/runJest.js +11 -14
  9. package/dist/js/modern/base/utils.js +2 -12
  10. package/dist/js/modern/cli/bff/app.js +0 -7
  11. package/dist/js/modern/cli/bff/index.js +4 -15
  12. package/dist/js/modern/cli/bff/mockAPI.js +4 -20
  13. package/dist/js/modern/cli/bff/setup.js +0 -5
  14. package/dist/js/modern/cli/bff/utils/index.js +0 -4
  15. package/dist/js/modern/cli/index.js +2 -9
  16. package/dist/js/modern/cli/test.js +0 -4
  17. package/dist/js/modern/runtime-testing/app.js +0 -15
  18. package/dist/js/modern/runtime-testing/customRender.js +0 -6
  19. package/dist/js/modern/runtime-testing/reduck.js +0 -10
  20. package/dist/js/modern/runtime-testing/request.js +1 -4
  21. package/dist/js/modern/runtime-testing/resolvePlugins.js +0 -6
  22. package/dist/js/node/base/config/index.js +0 -8
  23. package/dist/js/node/base/config/patches/assetsModule.js +0 -2
  24. package/dist/js/node/base/config/patches/index.js +0 -6
  25. package/dist/js/node/base/config/patches/transformer.js +1 -9
  26. package/dist/js/node/base/config/resolver.js +0 -5
  27. package/dist/js/node/base/config/testConfigOperator.js +0 -24
  28. package/dist/js/node/base/config/transformer/babelTransformer.js +0 -4
  29. package/dist/js/node/base/hook.js +0 -2
  30. package/dist/js/node/base/index.js +0 -7
  31. package/dist/js/node/base/runJest.js +11 -21
  32. package/dist/js/node/base/utils.js +2 -22
  33. package/dist/js/node/cli/bff/app.js +0 -14
  34. package/dist/js/node/cli/bff/index.js +4 -25
  35. package/dist/js/node/cli/bff/mockAPI.js +2 -25
  36. package/dist/js/node/cli/bff/setup.js +0 -11
  37. package/dist/js/node/cli/bff/utils/index.js +0 -9
  38. package/dist/js/node/cli/index.js +2 -21
  39. package/dist/js/node/cli/test.js +0 -10
  40. package/dist/js/node/index.js +0 -4
  41. package/dist/js/node/runtime-testing/app.js +0 -20
  42. package/dist/js/node/runtime-testing/base.js +0 -5
  43. package/dist/js/node/runtime-testing/customRender.js +0 -10
  44. package/dist/js/node/runtime-testing/index.js +0 -4
  45. package/dist/js/node/runtime-testing/reduck.js +0 -24
  46. package/dist/js/node/runtime-testing/request.js +1 -6
  47. package/dist/js/node/runtime-testing/resolvePlugins.js +0 -8
  48. package/dist/js/treeshaking/base/config/index.js +1 -6
  49. package/dist/js/treeshaking/base/config/patches/index.js +0 -17
  50. package/dist/js/treeshaking/base/config/patches/transformer.js +1 -7
  51. package/dist/js/treeshaking/base/config/resolver.js +0 -3
  52. package/dist/js/treeshaking/base/config/testConfigOperator.js +0 -15
  53. package/dist/js/treeshaking/base/config/transformer/babelTransformer.js +0 -1
  54. package/dist/js/treeshaking/base/runJest.js +19 -38
  55. package/dist/js/treeshaking/base/utils.js +2 -10
  56. package/dist/js/treeshaking/cli/bff/app.js +0 -13
  57. package/dist/js/treeshaking/cli/bff/index.js +0 -16
  58. package/dist/js/treeshaking/cli/bff/mockAPI.js +8 -24
  59. package/dist/js/treeshaking/cli/bff/setup.js +0 -9
  60. package/dist/js/treeshaking/cli/bff/utils/index.js +1 -2
  61. package/dist/js/treeshaking/cli/index.js +2 -11
  62. package/dist/js/treeshaking/cli/test.js +0 -7
  63. package/dist/js/treeshaking/runtime-testing/app.js +2 -15
  64. package/dist/js/treeshaking/runtime-testing/customRender.js +0 -3
  65. package/dist/js/treeshaking/runtime-testing/reduck.js +0 -7
  66. package/dist/js/treeshaking/runtime-testing/request.js +2 -7
  67. package/dist/js/treeshaking/runtime-testing/resolvePlugins.js +0 -3
  68. package/dist/types/base/config/index.d.ts +0 -1
  69. package/dist/types/base/config/patches/assetsModule.d.ts +0 -1
  70. package/dist/types/base/config/patches/filemock.d.ts +0 -1
  71. package/dist/types/base/config/patches/transformer.d.ts +0 -1
  72. package/dist/types/base/config/testConfigOperator.d.ts +0 -2
  73. package/dist/types/base/runJest.d.ts +0 -2
  74. package/dist/types/base/utils.d.ts +0 -1
  75. package/dist/types/cli/bff/index.d.ts +0 -2
  76. package/dist/types/cli/bff/mockAPI.d.ts +0 -1
  77. package/dist/types/cli/index.d.ts +0 -2
  78. package/dist/types/runtime-testing/app.d.ts +0 -3
  79. package/dist/types/runtime-testing/customRender.d.ts +0 -2
  80. package/package.json +15 -15
@@ -5,8 +5,9 @@ import { MODERNJS_CONFIG_KEY } from "../constant";
5
5
  import TestingBffPlugin from "./bff";
6
6
  import test from "./test";
7
7
  export const mergeUserJestConfig = testUtils => {
8
- const resolveJestConfig = testUtils.testConfig.jest; // resolveJestConfig 如果是函数类型,在所有测试插件 jestConfig 都执行后,再执行生成最终配置
8
+ const resolveJestConfig = testUtils.testConfig.jest;
9
9
 
10
+ // resolveJestConfig 如果是函数类型,在所有测试插件 jestConfig 都执行后,再执行生成最终配置
10
11
  if (resolveJestConfig && typeof resolveJestConfig !== 'function') {
11
12
  testUtils.mergeJestConfig(resolveJestConfig);
12
13
  }
@@ -28,11 +29,9 @@ export default (() => {
28
29
  await test(api);
29
30
  });
30
31
  },
31
-
32
32
  validateSchema() {
33
33
  return PLUGIN_SCHEMAS['@modern-js/plugin-testing'];
34
34
  },
35
-
36
35
  config() {
37
36
  const appContext = api.useAppContext();
38
37
  testingExportsUtils = createRuntimeExportsUtils(appContext.internalDirectory, 'testing');
@@ -44,27 +43,21 @@ export default (() => {
44
43
  }
45
44
  };
46
45
  },
47
-
48
46
  addRuntimeExports() {
49
47
  const testingPath = path.resolve(__dirname, '../');
50
48
  testingExportsUtils.addExport(`export * from '${testingPath}'`);
51
49
  },
52
-
53
50
  jestConfig: async (utils, next) => {
54
51
  const appContext = api.useAppContext();
55
52
  const userConfig = api.useResolvedConfigContext();
56
53
  const apiOnly = await isApiOnly(appContext.appDirectory);
57
-
58
54
  if (apiOnly) {
59
55
  return next(utils);
60
56
  }
61
-
62
57
  const alias = mergeAlias(userConfig.source.alias);
63
-
64
58
  if (testingExportsUtils) {
65
59
  alias['@modern-js/runtime/testing'] = [testingExportsUtils.getPath()];
66
60
  }
67
-
68
61
  utils.mergeJestConfig({
69
62
  globals: {
70
63
  [MODERNJS_CONFIG_KEY]: userConfig
@@ -1,17 +1,14 @@
1
1
  import path from 'path';
2
2
  import { compiler } from '@modern-js/babel-compiler';
3
3
  import { runTest } from "../base";
4
-
5
4
  const test = async api => {
6
5
  const userConfig = api.useResolvedConfigContext();
7
6
  const appContext = api.useAppContext();
8
7
  userConfig.testing = userConfig.testing || {};
9
8
  const jest = userConfig.testing.jest || userConfig.tools.jest;
10
-
11
9
  if (Array.isArray(jest)) {
12
10
  userConfig.testing.jest = jest[0];
13
11
  }
14
-
15
12
  userConfig.testing.jest = userConfig.testing.jest || userConfig.tools.jest;
16
13
  const runtimeExportsPath = path.join(appContext.internalDirectory, '.runtime-exports');
17
14
  await compiler({
@@ -26,5 +23,4 @@ const test = async api => {
26
23
  });
27
24
  await runTest(api, userConfig.testing);
28
25
  };
29
-
30
26
  export default test;
@@ -1,52 +1,37 @@
1
1
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
-
3
2
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
-
5
3
  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; }
6
-
7
4
  import { createApp } from '@modern-js/runtime';
8
5
  import { MODERNJS_CONFIG_KEY } from "../constant";
9
6
  import resolvePlugins from "./resolvePlugins";
10
-
11
7
  class ModernRuntime {
12
8
  constructor(options) {
13
9
  _defineProperty(this, "options", void 0);
14
-
15
10
  this.options = options;
16
11
  }
17
-
18
12
  init(options) {
19
13
  this.options = options;
20
14
  }
21
-
22
15
  createApp(props) {
23
16
  var _this$options;
24
-
25
17
  const {
26
18
  entry,
27
19
  children
28
20
  } = props || {};
29
21
  let runtimeFeatures = (_this$options = this.options) === null || _this$options === void 0 ? void 0 : _this$options.runtime;
30
-
31
22
  if (entry) {
32
23
  var _this$options$runtime;
33
-
34
24
  runtimeFeatures = _objectSpread(_objectSpread({}, runtimeFeatures || {}), (_this$options$runtime = this.options.runtimeByEntries) === null || _this$options$runtime === void 0 ? void 0 : _this$options$runtime[entry]);
35
25
  }
36
-
37
26
  const Component = () => {
38
27
  if (!children) {
39
28
  return null;
40
29
  }
41
-
42
30
  return children;
43
31
  };
44
-
45
32
  return createApp({
46
33
  plugins: resolvePlugins(runtimeFeatures || {})
47
34
  })(Component);
48
35
  }
49
-
50
36
  }
51
-
52
37
  export default new ModernRuntime(global[MODERNJS_CONFIG_KEY] || {});
@@ -1,17 +1,11 @@
1
1
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
-
3
2
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
-
5
3
  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; }
6
-
7
4
  import React from 'react';
8
5
  import { render } from '@testing-library/react';
9
6
  import app from "./app";
10
-
11
7
  const WrapModernProviders = props => /*#__PURE__*/React.createElement(app.createApp(props));
12
-
13
8
  const customRender = (ui, options) => render(ui, _objectSpread({
14
9
  wrapper: WrapModernProviders
15
10
  }, options));
16
-
17
11
  export default customRender;
@@ -1,9 +1,6 @@
1
1
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
-
3
2
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
-
5
3
  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; }
6
-
7
4
  import { createStore as originCreateStore } from '@modern-js-reduck/store';
8
5
  import effectsPlugin from '@modern-js-reduck/plugin-effects';
9
6
  import autoActionsPlugin from '@modern-js-reduck/plugin-auto-actions';
@@ -15,29 +12,22 @@ export const autoActions = () => autoActionsPlugin;
15
12
  export const createStore = props => {
16
13
  const createStatePlugins = () => {
17
14
  var _modernConfig$runtime;
18
-
19
15
  const modernConfig = global[MODERNJS_CONFIG_KEY];
20
16
  const stateConfig = modernConfig === null || modernConfig === void 0 ? void 0 : (_modernConfig$runtime = modernConfig.runtime) === null || _modernConfig$runtime === void 0 ? void 0 : _modernConfig$runtime.state;
21
17
  const plugins = [];
22
-
23
18
  if ((stateConfig === null || stateConfig === void 0 ? void 0 : stateConfig.effects) !== false) {
24
19
  plugins.push(effects());
25
20
  }
26
-
27
21
  if ((stateConfig === null || stateConfig === void 0 ? void 0 : stateConfig.autoActions) !== false) {
28
22
  plugins.push(autoActions());
29
23
  }
30
-
31
24
  if ((stateConfig === null || stateConfig === void 0 ? void 0 : stateConfig.immer) !== false) {
32
25
  plugins.push(immer());
33
26
  }
34
-
35
27
  return ((props === null || props === void 0 ? void 0 : props.plugins) || []).concat(plugins);
36
28
  };
37
-
38
29
  const config = _objectSpread(_objectSpread({}, props || {}), {}, {
39
30
  plugins: createStatePlugins()
40
31
  });
41
-
42
32
  return originCreateStore(config);
43
33
  };
@@ -1,19 +1,16 @@
1
1
  /* eslint-disable eslint-comments/disable-enable-pair */
2
+
2
3
  import supertest from 'supertest';
3
4
  import { getApp } from "../cli/bff/app";
4
-
5
5
  function request(...args) {
6
6
  const [fn, ...extraArgs] = args;
7
7
  const app = getApp();
8
-
9
8
  if (!fn) {
10
9
  return supertest(app);
11
10
  }
12
-
13
11
  fn.returnHttp = true;
14
12
  const res = fn(...extraArgs);
15
13
  fn.returnHttp = false;
16
14
  return res;
17
15
  }
18
-
19
16
  export { request };
@@ -1,21 +1,15 @@
1
1
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
-
3
2
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
-
5
3
  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; }
6
-
7
4
  const allowedFeatures = ['router', 'state'];
8
5
  export default function resolvePlugins(features) {
9
6
  const plugins = [];
10
-
11
7
  if (!features) {
12
8
  return plugins;
13
9
  }
14
-
15
10
  Object.keys(features).forEach(feature => {
16
11
  if (allowedFeatures.includes(feature)) {
17
12
  const curPluginRes = require(`@modern-js/runtime/plugins`)[feature](_objectSpread({}, features[feature]));
18
-
19
13
  plugins.push(curPluginRes);
20
14
  }
21
15
  });
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.patchConfig = exports.getJestUtils = exports.DEFAULT_RESOLVER_PATH = void 0;
7
-
8
7
  var _patches = require("./patches");
9
-
10
8
  var _testConfigOperator = require("./testConfigOperator");
11
-
12
9
  /**
13
10
  * Parse jest config
14
11
  */
@@ -16,16 +13,11 @@ const getJestUtils = testConfig => {
16
13
  const testOperator = new _testConfigOperator.TestConfigOperator(testConfig);
17
14
  return testOperator;
18
15
  };
19
-
20
16
  exports.getJestUtils = getJestUtils;
21
-
22
17
  const patchConfig = async testOperator => {
23
18
  await (0, _patches.applyPatches)(testOperator);
24
19
  return testOperator.jestConfig;
25
20
  };
26
-
27
21
  exports.patchConfig = patchConfig;
28
-
29
22
  const DEFAULT_RESOLVER_PATH = require.resolve("./resolver");
30
-
31
23
  exports.DEFAULT_RESOLVER_PATH = DEFAULT_RESOLVER_PATH;
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.patchAssetsModule = void 0;
7
-
8
7
  /**
9
8
  * Merge config from testConfig.jest
10
9
  */
@@ -16,5 +15,4 @@ const patchAssetsModule = testOperator => {
16
15
  }
17
16
  });
18
17
  };
19
-
20
18
  exports.patchAssetsModule = patchAssetsModule;
@@ -4,21 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.applyPatches = void 0;
7
-
8
7
  var _transformer = require("./transformer");
9
-
10
8
  var _assetsModule = require("./assetsModule");
11
-
12
9
  const _applyPatches = async (patches, testOperator) => {
13
10
  for (const patch of patches) {
14
11
  await patch(testOperator);
15
12
  }
16
13
  };
17
-
18
14
  const patches = [_transformer.patchTransformer, _assetsModule.patchAssetsModule];
19
-
20
15
  const applyPatches = async testConfig => {
21
16
  await _applyPatches(patches, testConfig);
22
17
  };
23
-
24
18
  exports.applyPatches = applyPatches;
@@ -4,32 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.patchTransformer = void 0;
7
-
8
7
  var _utils = require("../../utils");
9
-
10
8
  const resolveTsCompilerOptions = () => {
11
9
  const tsCompilerOptions = (0, _utils.readCompilerOptions)() || {};
12
10
  const {
13
11
  jsx
14
12
  } = tsCompilerOptions;
15
-
16
13
  if (!jsx) {
17
14
  return null;
18
15
  }
19
-
20
16
  tsCompilerOptions.jsx = 'react-jsx';
21
17
  return tsCompilerOptions;
22
18
  };
19
+
23
20
  /**
24
21
  * Map `TestConfig.transformer` to jest config
25
22
  */
26
-
27
-
28
23
  const patchTransformer = testOperator => {
29
24
  const {
30
25
  transformer
31
26
  } = testOperator.testConfig;
32
-
33
27
  if (transformer === 'babel-jest') {
34
28
  testOperator.mergeJestConfig({
35
29
  transform: {
@@ -37,7 +31,6 @@ const patchTransformer = testOperator => {
37
31
  }
38
32
  });
39
33
  }
40
-
41
34
  if (transformer === 'ts-jest') {
42
35
  testOperator.mergeJestConfig({
43
36
  transform: {
@@ -54,5 +47,4 @@ const patchTransformer = testOperator => {
54
47
  });
55
48
  }
56
49
  };
57
-
58
50
  exports.patchTransformer = patchTransformer;
@@ -1,20 +1,15 @@
1
1
  "use strict";
2
2
 
3
3
  var _enhancedResolve = _interopRequireDefault(require("enhanced-resolve"));
4
-
5
4
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
-
7
5
  const resolver = _enhancedResolve.default.create.sync({
8
6
  conditionNames: ['require', 'node', 'default'],
9
7
  extensions: ['.js', '.json', '.node', '.ts', '.tsx']
10
8
  });
11
-
12
9
  const shouldResolveByEnhance = url => /^@[^/]+\/[^/]+\/.*/.test(url);
13
-
14
10
  module.exports = function (request, options) {
15
11
  if (shouldResolveByEnhance(request)) {
16
12
  return resolver(options.basedir, request);
17
13
  }
18
-
19
14
  return options.defaultResolver(request, options);
20
15
  };
@@ -4,90 +4,66 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.TestConfigOperator = void 0;
7
-
8
7
  var _lodash = require("@modern-js/utils/lodash");
9
-
10
8
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11
-
12
9
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
13
-
14
10
  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; }
15
-
16
11
  class TestConfigOperator {
17
12
  constructor(testConfig) {
18
13
  _defineProperty(this, "_testConfig", void 0);
19
-
20
14
  _defineProperty(this, "_jestConfig", void 0);
21
-
22
15
  _defineProperty(this, "userJestConfig", void 0);
23
-
24
16
  _defineProperty(this, "defaultTestConfig", {
25
17
  transformer: 'babel-jest'
26
18
  });
27
-
28
19
  this._testConfig = testConfig;
29
20
  this._jestConfig = {};
30
21
  this.userJestConfig = testConfig.jest;
31
22
  this.initial();
32
23
  }
33
-
34
24
  initial() {
35
25
  this._testConfig = (0, _lodash.merge)({}, this.defaultTestConfig, this.testConfig);
36
26
  }
37
-
38
27
  get jestConfig() {
39
28
  return this._jestConfig;
40
29
  }
41
-
42
30
  get testConfig() {
43
31
  return this._testConfig;
44
32
  }
45
-
46
33
  mergeJestConfig(sourceConfig) {
47
34
  this._jestConfig = (0, _lodash.merge)({}, this._jestConfig, sourceConfig);
48
35
  }
49
-
50
36
  setJestUserConfig() {
51
37
  const {
52
38
  userJestConfig
53
39
  } = this;
54
-
55
40
  if (typeof userJestConfig === 'object') {
56
41
  this.setJestConfig(userJestConfig);
57
42
  }
58
43
  }
59
-
60
44
  setJestConfig(sourceConfig, options) {
61
45
  if (options) {
62
46
  const {
63
47
  force
64
48
  } = options;
65
-
66
49
  if (force) {
67
50
  this._jestConfig = sourceConfig;
68
51
  return;
69
52
  }
70
53
  }
71
-
72
54
  this._jestConfig = _objectSpread(_objectSpread({}, this._jestConfig), sourceConfig);
73
55
  }
74
-
75
56
  getFinalConfig() {
76
57
  const {
77
58
  userJestConfig
78
59
  } = this;
79
-
80
60
  if (!userJestConfig) {
81
61
  return this._jestConfig;
82
62
  }
83
-
84
63
  if (typeof userJestConfig === 'function') {
85
64
  return userJestConfig(this._jestConfig);
86
65
  }
87
-
88
66
  return this.jestConfig;
89
67
  }
90
-
91
68
  }
92
-
93
69
  exports.TestConfigOperator = TestConfigOperator;
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _babelJest = _interopRequireDefault(require("babel-jest"));
9
-
10
8
  var _babelJest$createTran;
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  const babelTransformer = (_babelJest$createTran = _babelJest.default.createTransformer) === null || _babelJest$createTran === void 0 ? void 0 : _babelJest$createTran.call(_babelJest.default, {
15
11
  presets: [[require.resolve('@modern-js/babel-preset-app'), {
16
12
  appDirectory: process.cwd(),
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.testingHooks = exports.jestConfigHook = exports.afterTestHook = void 0;
7
-
8
7
  var _plugin = require("@modern-js/plugin");
9
-
10
8
  const jestConfigHook = (0, _plugin.createAsyncPipeline)();
11
9
  exports.jestConfigHook = jestConfigHook;
12
10
  const afterTestHook = (0, _plugin.createParallelWorkflow)();
@@ -47,19 +47,12 @@ Object.defineProperty(exports, "testingHooks", {
47
47
  return _hook.testingHooks;
48
48
  }
49
49
  });
50
-
51
50
  var _runJest = require("./runJest");
52
-
53
51
  var _utils = require("./utils");
54
-
55
52
  var _config = require("./config");
56
-
57
53
  var _testConfigOperator = require("./config/testConfigOperator");
58
-
59
54
  var _hook = require("./hook");
60
-
61
55
  var _types = require("./types");
62
-
63
56
  Object.keys(_types).forEach(function (key) {
64
57
  if (key === "default" || key === "__esModule") return;
65
58
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -5,19 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.runJest = runJest;
7
7
  exports.runTest = runTest;
8
-
9
8
  var _yargs = _interopRequireDefault(require("yargs/yargs"));
10
-
11
9
  var _jest = require("jest");
12
-
13
10
  var _utils = require("@modern-js/utils");
14
-
15
11
  var _config = require("./config");
16
-
17
12
  var _utils2 = require("./utils");
18
-
19
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
-
21
14
  /**
22
15
  * @file run jest by nodejs API
23
16
  * @description
@@ -25,6 +18,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
25
18
  * The followed code is inspired by
26
19
  * https://github.com/facebook/jest/blob/fdc74af37235354e077edeeee8aa2d1a4a863032/packages/jest-cli/src/cli/index.ts#L21
27
20
  */
21
+
28
22
  const buildArgv = async (rawArgv, config) => {
29
23
  const argv = await (0, _yargs.default)(rawArgv).argv;
30
24
  const result = {
@@ -35,32 +29,28 @@ const buildArgv = async (rawArgv, config) => {
35
29
  if (key.includes('-') || key === '_') {
36
30
  return;
37
31
  }
38
-
39
32
  result[key] = argv[key];
40
33
  });
41
-
42
34
  if (config) {
43
35
  result.config = JSON.stringify(config);
44
36
  }
45
-
46
37
  return result;
47
38
  };
48
-
49
39
  const readResultsAndExit = (result, globalConfig) => {
50
- const code = !result || result.success ? 0 : globalConfig.testFailureExitCode; // Only exit if needed
40
+ const code = !result || result.success ? 0 : globalConfig.testFailureExitCode;
51
41
 
42
+ // Only exit if needed
52
43
  process.on('exit', () => {
53
44
  if (typeof code === 'number' && code !== 0) {
54
45
  process.exitCode = code;
55
46
  }
56
47
  });
57
-
58
48
  if (globalConfig.forceExit) {
59
49
  if (!globalConfig.detectOpenHandles) {
60
50
  console.warn(`${_utils.chalk.bold('Force exiting Jest: ')}Have you considered using \`--detectOpenHandles\` to detect ` + `async operations that kept running after all tests finished?`);
61
- } // eslint-disable-next-line no-process-exit
62
-
51
+ }
63
52
 
53
+ // eslint-disable-next-line no-process-exit
64
54
  process.exit(code);
65
55
  } else if (!globalConfig.detectOpenHandles) {
66
56
  setTimeout(() => {
@@ -68,11 +58,10 @@ const readResultsAndExit = (result, globalConfig) => {
68
58
  }, 1000).unref();
69
59
  }
70
60
  };
61
+
71
62
  /**
72
63
  * Node API: execute jest
73
64
  */
74
-
75
-
76
65
  async function runJest(config, pwd = process.cwd()) {
77
66
  try {
78
67
  const argvConfig = await buildArgv(process.argv.slice(2), config);
@@ -82,21 +71,22 @@ async function runJest(config, pwd = process.cwd()) {
82
71
  } = await (0, _jest.runCLI)(argvConfig, [pwd]);
83
72
  readResultsAndExit(results, globalConfig);
84
73
  } catch (e) {
85
- console.error(_utils.chalk.red((e === null || e === void 0 ? void 0 : e.stack) || e)); // eslint-disable-next-line no-process-exit
74
+ console.error(_utils.chalk.red((e === null || e === void 0 ? void 0 : e.stack) || e));
86
75
 
76
+ // eslint-disable-next-line no-process-exit
87
77
  process.exit(1);
88
78
  }
89
79
  }
80
+
90
81
  /**
91
82
  * Node API: run test
92
83
  */
93
-
94
-
95
84
  async function runTest(api, config, pwd = process.cwd()) {
96
85
  process.env.NODE_ENV = 'test';
97
86
  const jestUtils = (0, _config.getJestUtils)(config);
98
- await (0, _config.patchConfig)(jestUtils); // 确保用户设置的配置可以被插件处理,比如设置在 projects 中
87
+ await (0, _config.patchConfig)(jestUtils);
99
88
 
89
+ // 确保用户设置的配置可以被插件处理,比如设置在 projects 中
100
90
  jestUtils.setJestUserConfig();
101
91
  const hookRunners = api.useHookRunners();
102
92
  const testConfigOperator = await hookRunners.jestConfig(jestUtils, {