@react-native-harness/jest 1.1.0-rc.1 → 1.1.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/__tests__/errors.test.js +6 -1
  2. package/dist/__tests__/harness-cache.test.d.ts +2 -0
  3. package/dist/__tests__/harness-cache.test.d.ts.map +1 -0
  4. package/dist/__tests__/harness-cache.test.js +51 -0
  5. package/dist/__tests__/harness.test.js +484 -47
  6. package/dist/__tests__/index.test.d.ts +2 -0
  7. package/dist/__tests__/index.test.d.ts.map +1 -0
  8. package/dist/__tests__/index.test.js +42 -0
  9. package/dist/__tests__/resource-lock.test.d.ts +2 -0
  10. package/dist/__tests__/resource-lock.test.d.ts.map +1 -0
  11. package/dist/__tests__/resource-lock.test.js +103 -0
  12. package/dist/action-hooks.d.ts +9 -0
  13. package/dist/action-hooks.d.ts.map +1 -0
  14. package/dist/action-hooks.js +36 -0
  15. package/dist/cli-args.d.ts +1 -0
  16. package/dist/cli-args.d.ts.map +1 -1
  17. package/dist/cli-args.js +5 -0
  18. package/dist/crash-supervisor.d.ts.map +1 -1
  19. package/dist/crash-supervisor.js +7 -6
  20. package/dist/errors.d.ts +5 -0
  21. package/dist/errors.d.ts.map +1 -1
  22. package/dist/errors.js +10 -2
  23. package/dist/harness.d.ts +23 -1
  24. package/dist/harness.d.ts.map +1 -1
  25. package/dist/harness.js +574 -136
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +205 -58
  28. package/dist/logs.d.ts +4 -0
  29. package/dist/logs.d.ts.map +1 -1
  30. package/dist/logs.js +12 -0
  31. package/dist/resource-lock.d.ts +25 -0
  32. package/dist/resource-lock.d.ts.map +1 -0
  33. package/dist/resource-lock.js +278 -0
  34. package/dist/run.d.ts +7 -1
  35. package/dist/run.d.ts.map +1 -1
  36. package/dist/run.js +13 -8
  37. package/dist/setup.d.ts.map +1 -1
  38. package/dist/setup.js +29 -2
  39. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  40. package/package.json +7 -6
  41. package/src/__tests__/errors.test.ts +18 -6
  42. package/src/__tests__/harness-cache.test.ts +74 -0
  43. package/src/__tests__/harness.test.ts +702 -49
  44. package/src/__tests__/index.test.ts +61 -0
  45. package/src/__tests__/resource-lock.test.ts +138 -0
  46. package/src/action-hooks.ts +66 -0
  47. package/src/cli-args.ts +6 -0
  48. package/src/crash-supervisor.ts +13 -6
  49. package/src/env.d.ts +1 -1
  50. package/src/errors.ts +15 -4
  51. package/src/harness.ts +743 -157
  52. package/src/index.ts +276 -64
  53. package/src/logs.ts +17 -3
  54. package/src/resource-lock.ts +450 -0
  55. package/src/run.ts +20 -10
  56. package/src/setup.ts +42 -1
  57. package/tsconfig.json +3 -3
  58. package/tsconfig.lib.json +6 -6
package/dist/run.js CHANGED
@@ -48,14 +48,14 @@ export const runHarnessTestFile = async ({ testPath, globalConfig, projectConfig
48
48
  // Extract setup files from Jest config and convert to relative paths
49
49
  const setupFiles = projectConfig.setupFiles?.map((setupFile) => path.relative(globalConfig.rootDir, setupFile));
50
50
  const setupFilesAfterEnv = projectConfig.setupFilesAfterEnv?.map((setupFile) => path.relative(globalConfig.rootDir, setupFile));
51
- const results = await harness.runTests(relativeTestPath, {
51
+ const harnessResult = await harness.runTests(relativeTestPath, {
52
52
  testNamePattern: globalConfig.testNamePattern,
53
53
  setupFiles,
54
54
  setupFilesAfterEnv,
55
55
  runner: harness.context.platform.runner,
56
56
  });
57
57
  const end = Date.now();
58
- const allTests = flattenTests(results);
58
+ const allTests = flattenTests(harnessResult);
59
59
  const stats = calculateStats(allTests);
60
60
  // Convert TestResult[] to the format expected by toTestResult
61
61
  const tests = allTests.map((test) => {
@@ -75,10 +75,10 @@ export const runHarnessTestFile = async ({ testPath, globalConfig, projectConfig
75
75
  };
76
76
  });
77
77
  // Check if the entire suite was skipped
78
- const skipped = results.status === 'skipped';
78
+ const skipped = harnessResult.status === 'skipped';
79
79
  // Get error message from suite if it failed
80
- const errorMessage = results.error?.message || null;
81
- const totalResults = toTestResult({
80
+ const errorMessage = harnessResult.error?.message || null;
81
+ const jestResult = toTestResult({
82
82
  stats: {
83
83
  failures: stats.failures,
84
84
  pending: stats.pending,
@@ -91,8 +91,13 @@ export const runHarnessTestFile = async ({ testPath, globalConfig, projectConfig
91
91
  errorMessage,
92
92
  tests,
93
93
  jestTestPath: testPath,
94
- coverage: results.coverage,
94
+ coverage: harnessResult.coverage,
95
95
  });
96
- totalResults.failureMessage = formatResultsErrors(totalResults.testResults, projectConfig, globalConfig, testPath);
97
- return totalResults;
96
+ jestResult.failureMessage = formatResultsErrors(jestResult.testResults, projectConfig, globalConfig, testPath);
97
+ return {
98
+ jestResult,
99
+ harnessResult,
100
+ relativeTestPath,
101
+ duration: end - start,
102
+ };
98
103
  };
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAqCxD,eAAO,MAAM,KAAK,GAAU,cAAc,UAAU,CAAC,YAAY,kBA4ChE,CAAC"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AA4CxD,eAAO,MAAM,KAAK,GAAU,cAAc,UAAU,CAAC,YAAY,kBA6EhE,CAAC"}
package/dist/setup.js CHANGED
@@ -1,12 +1,17 @@
1
- import { getConfig, } from '@react-native-harness/config';
1
+ import { getConfig, ConfigSchema, } from '@react-native-harness/config';
2
2
  import { getHarness } from './harness.js';
3
3
  import { preRunMessage } from 'jest-util';
4
4
  import { getAdditionalCliArgs } from './cli-args.js';
5
5
  import { logTestEnvironmentReady, logTestRunHeader } from './logs.js';
6
6
  import { NoRunnerSpecifiedError, RunnerNotFoundError } from './errors.js';
7
+ import { logger } from '@react-native-harness/tools';
8
+ import { createActionHooksPlugin } from './action-hooks.js';
9
+ const setupLogger = logger.child('setup');
7
10
  const getHarnessConfig = async (globalConfig) => {
8
11
  const projectRoot = globalConfig.rootDir;
12
+ setupLogger.debug('loading Harness config from %s', projectRoot);
9
13
  const { config: harnessConfig } = await getConfig(projectRoot);
14
+ setupLogger.debug('loaded Harness config');
10
15
  return harnessConfig;
11
16
  };
12
17
  const getHarnessRunner = (config, cliArgs) => {
@@ -18,11 +23,12 @@ const getHarnessRunner = (config, cliArgs) => {
18
23
  if (!runner) {
19
24
  throw new RunnerNotFoundError(selectedRunnerName);
20
25
  }
26
+ setupLogger.debug('selected runner %s (%s)', runner.name, runner.platformId);
21
27
  return runner;
22
28
  };
23
29
  export const setup = async (globalConfig) => {
24
30
  preRunMessage.remove(process.stderr);
25
- const harnessConfig = global.HARNESS_CONFIG ?? (await getHarnessConfig(globalConfig));
31
+ let harnessConfig = global.HARNESS_CONFIG ?? (await getHarnessConfig(globalConfig));
26
32
  if (global.HARNESS) {
27
33
  // Do not setup again if HARNESS is already initialized
28
34
  // This is useful when running tests in watch mode
@@ -33,7 +39,24 @@ export const setup = async (globalConfig) => {
33
39
  await global.HARNESS.dispose();
34
40
  });
35
41
  const cliArgs = getAdditionalCliArgs();
42
+ if (cliArgs.metroPort != null) {
43
+ setupLogger.debug('applying CLI metro port override: %d', cliArgs.metroPort);
44
+ harnessConfig = ConfigSchema.parse({
45
+ ...harnessConfig,
46
+ metroPort: cliArgs.metroPort,
47
+ });
48
+ }
49
+ if (process.env.PRE_RUN_HOOK || process.env.AFTER_RUN_HOOK) {
50
+ harnessConfig = ConfigSchema.parse({
51
+ ...harnessConfig,
52
+ plugins: [...(harnessConfig.plugins ?? []), createActionHooksPlugin()],
53
+ });
54
+ }
36
55
  const selectedRunner = getHarnessRunner(harnessConfig, cliArgs);
56
+ if (harnessConfig.webSocketPort != null &&
57
+ harnessConfig.webSocketPort !== harnessConfig.metroPort) {
58
+ logger.warn(`Config option "webSocketPort" is deprecated and ignored. Harness now uses metroPort (${harnessConfig.metroPort}) for bridge traffic.`);
59
+ }
37
60
  if (globalConfig.collectCoverage) {
38
61
  // This is going to be used by @react-native-harness/babel-preset
39
62
  // to enable instrumentation of test files.
@@ -41,13 +64,17 @@ export const setup = async (globalConfig) => {
41
64
  if (harnessConfig.coverage?.root) {
42
65
  process.env.RN_HARNESS_COVERAGE_ROOT = harnessConfig.coverage.root;
43
66
  }
67
+ setupLogger.debug('coverage enabled for this run');
44
68
  }
45
69
  if (harnessConfig.disableViewFlattening) {
46
70
  process.env.RN_HARNESS_VIEW_FLATTENING = 'false';
71
+ setupLogger.debug('view flattening disabled for runtime');
47
72
  }
48
73
  logTestRunHeader(selectedRunner);
74
+ setupLogger.debug('creating Harness instance');
49
75
  const harness = await getHarness(harnessConfig, selectedRunner, globalConfig.rootDir);
50
76
  logTestEnvironmentReady(selectedRunner);
77
+ setupLogger.debug('Harness instance is ready');
51
78
  global.HARNESS_CONFIG = harnessConfig;
52
79
  global.HARNESS = harness;
53
80
  };