@nyby/detox-component-testing 1.5.1 → 1.6.0

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.
package/README.md CHANGED
@@ -189,7 +189,6 @@ Subsequent mounts: ~100ms (in-place swap)
189
189
  ### App-side (import from `@nyby/detox-component-testing`)
190
190
 
191
191
  #### `registerComponent(Component, defaultProps?)`
192
-
193
192
  #### `registerComponent(name, Component, defaultProps?)`
194
193
 
195
194
  Register a component for testing. When called with just a component, the name is inferred from `Component.name` or `Component.displayName`.
@@ -1,3 +1,3 @@
1
- import React from 'react';
1
+ import React from "react";
2
2
  export declare function ComponentHarness(): React.JSX.Element;
3
3
  //# sourceMappingURL=ComponentHarness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentHarness.d.ts","sourceRoot":"","sources":["../src/ComponentHarness.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AAuDnG,wBAAgB,gBAAgB,sBAkD/B"}
1
+ {"version":3,"file":"ComponentHarness.d.ts","sourceRoot":"","sources":["../src/ComponentHarness.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AA4Df,wBAAgB,gBAAgB,sBAkD/B"}
@@ -55,8 +55,8 @@ class RenderErrorBoundary extends react_1.Component {
55
55
  return this.props.children;
56
56
  }
57
57
  }
58
- const PROP_PREFIX = 'detoxProp_';
59
- const SPY_PREFIX = 'detoxSpy_';
58
+ const PROP_PREFIX = "detoxProp_";
59
+ const SPY_PREFIX = "detoxSpy_";
60
60
  function parseLaunchArgs(args) {
61
61
  const props = {};
62
62
  const spies = [];
@@ -86,7 +86,7 @@ function ComponentHarness() {
86
86
  else if (launchArgs.detoxComponentName) {
87
87
  const { props, spies } = parseLaunchArgs(launchArgs);
88
88
  activeMount = {
89
- id: '0',
89
+ id: "0",
90
90
  name: launchArgs.detoxComponentName,
91
91
  props,
92
92
  spies,
@@ -94,7 +94,7 @@ function ComponentHarness() {
94
94
  }
95
95
  return (react_1.default.createElement(react_native_1.View, { style: { flex: 1 } },
96
96
  react_1.default.createElement(react_native_1.TextInput, { testID: "detox-harness-control", onEndEditing: handleControl, style: {
97
- position: 'absolute',
97
+ position: "absolute",
98
98
  bottom: 0,
99
99
  left: 0,
100
100
  right: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentHarness.js","sourceRoot":"","sources":["../src/ComponentHarness.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ComponentHarness.js","sourceRoot":"","sources":["../src/ComponentHarness.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ComponentType } from 'react';
1
+ import { ComponentType } from "react";
2
2
  export interface ComponentEntry<P = any> {
3
3
  Component: ComponentType<P>;
4
4
  defaultProps: Partial<P>;
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentRegistry.d.ts","sourceRoot":"","sources":["../src/ComponentRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AAEpC,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,GAAG;IACrC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC1B;AAID,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAC3B,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GACxB,IAAI,CAAC;AACR,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AA0BnG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAQzD;AAED,wBAAgB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAEvD"}
1
+ {"version":3,"file":"ComponentRegistry.d.ts","sourceRoot":"","sources":["../src/ComponentRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,GAAG;IACrC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC1B;AAID,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAC3B,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GACxB,IAAI,CAAC;AACR,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAC3B,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GACxB,IAAI,CAAC;AA0BR,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAQzD;AAED,wBAAgB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAEvD"}
@@ -5,7 +5,7 @@ exports.getComponent = getComponent;
5
5
  exports.getAll = getAll;
6
6
  const registry = new Map();
7
7
  function registerComponent(nameOrComponent, componentOrProps, defaultProps) {
8
- if (typeof nameOrComponent === 'string') {
8
+ if (typeof nameOrComponent === "string") {
9
9
  registry.set(nameOrComponent, {
10
10
  Component: componentOrProps,
11
11
  defaultProps: (defaultProps || {}),
@@ -15,7 +15,7 @@ function registerComponent(nameOrComponent, componentOrProps, defaultProps) {
15
15
  const Component = nameOrComponent;
16
16
  const name = Component.displayName || Component.name;
17
17
  if (!name) {
18
- throw new Error('[detox-component-testing] Component must have a name or displayName to register without an explicit name.');
18
+ throw new Error("[detox-component-testing] Component must have a name or displayName to register without an explicit name.");
19
19
  }
20
20
  registry.set(name, {
21
21
  Component,
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentRegistry.js","sourceRoot":"","sources":["../src/ComponentRegistry.ts"],"names":[],"mappings":";;AAeA,8CAuBC;AAED,oCAQC;AAED,wBAEC;AA7CD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;AAQnD,SAAgB,iBAAiB,CAC/B,eAA0C,EAC1C,gBAAgD,EAChD,YAAyB;IAEzB,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QACxC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE;YAC5B,SAAS,EAAE,gBAAoC;YAC/C,YAAY,EAAE,CAAC,YAAY,IAAI,EAAE,CAAe;SACjD,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,eAAe,CAAC;QAClC,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,2GAA2G,CAC5G,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;YACjB,SAAS;YACT,YAAY,EAAE,CAAE,gBAA+B,IAAI,EAAE,CAAe;SACrE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,wCAAwC,IAAI,4DAA4D,CACzG,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,MAAM;IACpB,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"ComponentRegistry.js","sourceRoot":"","sources":["../src/ComponentRegistry.ts"],"names":[],"mappings":";;AAkBA,8CAuBC;AAED,oCAQC;AAED,wBAEC;AAhDD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;AAWnD,SAAgB,iBAAiB,CAC/B,eAA0C,EAC1C,gBAAgD,EAChD,YAAyB;IAEzB,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QACxC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE;YAC5B,SAAS,EAAE,gBAAoC;YAC/C,YAAY,EAAE,CAAC,YAAY,IAAI,EAAE,CAAe;SACjD,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,eAAe,CAAC;QAClC,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,2GAA2G,CAC5G,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;YACjB,SAAS;YACT,YAAY,EAAE,CAAE,gBAA+B,IAAI,EAAE,CAAe;SACrE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,wCAAwC,IAAI,4DAA4D,CACzG,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,MAAM;IACpB,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ComponentType, ReactNode } from 'react';
1
+ import { ComponentType, ReactNode } from "react";
2
2
  export interface WrapperProps {
3
3
  children: ReactNode;
4
4
  launchArgs: Record<string, any>;
@@ -1 +1 @@
1
- {"version":3,"file":"configureHarness.d.ts","sourceRoot":"","sources":["../src/configureHarness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CACvC;AAMD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAI5D;AAED,wBAAgB,UAAU,IAAI,aAAa,CAAC,YAAY,CAAC,CAExD"}
1
+ {"version":3,"file":"configureHarness.d.ts","sourceRoot":"","sources":["../src/configureHarness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CACvC;AAMD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAI5D;AAED,wBAAgB,UAAU,IAAI,aAAa,CAAC,YAAY,CAAC,CAExD"}
@@ -1 +1 @@
1
- {"version":3,"file":"configureHarness.js","sourceRoot":"","sources":["../src/configureHarness.ts"],"names":[],"mappings":";;AAeA,4CAIC;AAED,gCAEC;AAZD,MAAM,cAAc,GAAG,CAAC,EAAC,QAAQ,EAAe,EAAE,EAAE,CAAC,QAAQ,CAAC;AAE9D,IAAI,aAAa,GAAuC,IAAI,CAAC;AAE7D,SAAgB,gBAAgB,CAAC,MAAqB;IACpD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAgB,UAAU;IACxB,OAAO,aAAa,IAAI,cAAc,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"configureHarness.js","sourceRoot":"","sources":["../src/configureHarness.ts"],"names":[],"mappings":";;AAeA,4CAIC;AAED,gCAEC;AAZD,MAAM,cAAc,GAAG,CAAC,EAAE,QAAQ,EAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC;AAEhE,IAAI,aAAa,GAAuC,IAAI,CAAC;AAE7D,SAAgB,gBAAgB,CAAC,MAAqB;IACpD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAgB,UAAU;IACxB,OAAO,aAAa,IAAI,cAAc,CAAC;AACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE;IAAC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAAC,wBAAwB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CAAC,iBAiB7G;AAaD,wBAAsB,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,iBAI7D"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE;IACT,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,wBAAwB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACjD,iBAiBF;AAaD,wBAAsB,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,iBAI7D"}
package/dist/debug.js CHANGED
@@ -17,13 +17,13 @@ async function captureArtifacts(name, outputDir, deviceRef) {
17
17
  (0, fs_1.renameSync)(tempPath, (0, path_1.join)(outputDir, `debug-${name}.png`));
18
18
  }
19
19
  }
20
- catch (_a) { }
20
+ catch { }
21
21
  // Native view hierarchy
22
22
  try {
23
23
  const xml = await deviceRef.generateViewHierarchyXml();
24
- (0, fs_1.writeFileSync)((0, path_1.join)(outputDir, `debug-${name}-view.xml`), xml, 'utf8');
24
+ (0, fs_1.writeFileSync)((0, path_1.join)(outputDir, `debug-${name}-view.xml`), xml, "utf8");
25
25
  }
26
- catch (_b) { }
26
+ catch { }
27
27
  }
28
28
  /**
29
29
  * Capture a screenshot and native view hierarchy.
@@ -37,7 +37,7 @@ async function captureArtifacts(name, outputDir, deviceRef) {
37
37
  let counter = 0;
38
38
  async function debug(label, outputDir) {
39
39
  const name = label || String(++counter);
40
- const dir = outputDir || (0, path_1.join)(process.cwd(), 'artifacts');
40
+ const dir = outputDir || (0, path_1.join)(process.cwd(), "artifacts");
41
41
  await captureArtifacts(name, dir, device);
42
42
  }
43
43
  //# sourceMappingURL=debug.js.map
package/dist/debug.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":";;AAOA,4CAoBC;AAaD,sBAIC;AA5CD,2BAAwD;AACxD,+BAA0B;AAE1B;;;GAGG;AACI,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,SAAiB,EACjB,SAA4G;IAE5G,IAAA,cAAS,EAAC,SAAS,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAExC,uDAAuD;IACvD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAA,eAAU,EAAC,QAAQ,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAAC,WAAM,CAAC,CAAA,CAAC;IAEV,wBAAwB;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,wBAAwB,EAAE,CAAC;QACvD,IAAA,kBAAa,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,SAAS,IAAI,WAAW,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IAAC,WAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED;;;;;;;;GAQG;AACH,IAAI,OAAO,GAAG,CAAC,CAAC;AAET,KAAK,UAAU,KAAK,CAAC,KAAc,EAAE,SAAkB;IAC5D,MAAM,IAAI,GAAG,KAAK,IAAI,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,SAAS,IAAI,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAC1D,MAAM,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":";;AAOA,4CAuBC;AAaD,sBAIC;AA/CD,2BAA0D;AAC1D,+BAA4B;AAE5B;;;GAGG;AACI,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,SAAiB,EACjB,SAGC;IAED,IAAA,cAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,uDAAuD;IACvD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAA,eAAU,EAAC,QAAQ,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,wBAAwB;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,wBAAwB,EAAE,CAAC;QACvD,IAAA,kBAAa,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,SAAS,IAAI,WAAW,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED;;;;;;;;GAQG;AACH,IAAI,OAAO,GAAG,CAAC,CAAC;AAET,KAAK,UAAU,KAAK,CAAC,KAAc,EAAE,SAAkB;IAC5D,MAAM,IAAI,GAAG,KAAK,IAAI,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,SAAS,IAAI,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAC1D,MAAM,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,14 +1,14 @@
1
- const DetoxCircusEnvironment = require('detox/runners/jest/testEnvironment');
2
- const {join} = require('path');
3
- const {captureArtifacts} = require('./debug');
1
+ const DetoxCircusEnvironment = require("detox/runners/jest/testEnvironment");
2
+ const { join } = require("path");
3
+ const { captureArtifacts } = require("./debug");
4
4
 
5
5
  class CustomDetoxEnvironment extends DetoxCircusEnvironment {
6
6
  async handleTestEvent(event, state) {
7
7
  await super.handleTestEvent(event, state);
8
8
 
9
- if (event.name === 'test_done' && event.test.errors.length > 0) {
10
- const safeName = event.test.name.replace(/[^a-zA-Z0-9_-]/g, '_');
11
- const outputDir = join(process.cwd(), 'artifacts');
9
+ if (event.name === "test_done" && event.test.errors.length > 0) {
10
+ const safeName = event.test.name.replace(/[^a-zA-Z0-9_-]/g, "_");
11
+ const outputDir = join(process.cwd(), "artifacts");
12
12
  await captureArtifacts(safeName, outputDir, this.global.device);
13
13
  }
14
14
  }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { registerComponent } from './ComponentRegistry';
2
- export { ComponentHarness } from './ComponentHarness';
3
- export { configureHarness, WrapperProps, HarnessConfig } from './configureHarness';
1
+ export { registerComponent } from "./ComponentRegistry";
2
+ export { ComponentHarness } from "./ComponentHarness";
3
+ export { configureHarness, WrapperProps, HarnessConfig, } from "./configureHarness";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAC,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,oBAAoB,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,uDAAoD;AAA5C,oHAAA,gBAAgB,OAAA;AACxB,uDAAiF;AAAzE,oHAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,uDAI4B;AAH1B,oHAAA,gBAAgB,OAAA"}
package/dist/mount.d.ts CHANGED
@@ -9,7 +9,6 @@ export interface SpyExpectation {
9
9
  }
10
10
  export declare function spy(name: string): SpyMarker;
11
11
  type MountProps = Record<string, string | number | boolean | SpyMarker>;
12
- export declare function assertNoRenderError(): Promise<void>;
13
12
  export declare function mount(componentName: string, props?: MountProps): Promise<void>;
14
13
  export declare function expectSpy(name: string): SpyExpectation;
15
14
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,qBAAqB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,cAAc,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAOD,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAE3C;AAED,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;AAExE,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAYzD;AAED,wBAAsB,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCpF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAetD"}
1
+ {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,qBAAqB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,cAAc,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAOD,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAE3C;AAED,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;AAkBxE,wBAAsB,KAAK,CACzB,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAqBtD"}
package/dist/mount.js CHANGED
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.spy = spy;
4
- exports.assertNoRenderError = assertNoRenderError;
5
4
  exports.mount = mount;
6
5
  exports.expectSpy = expectSpy;
7
- const SPY_MARKER = '__detoxSpy__';
6
+ const SPY_MARKER = "__detoxSpy__";
8
7
  let mountCounter = 0;
9
8
  let appLaunched = false;
10
9
  function spy(name) {
@@ -12,16 +11,16 @@ function spy(name) {
12
11
  }
13
12
  async function assertNoRenderError() {
14
13
  try {
15
- await waitFor(element(by.id('detox-render-error')))
14
+ await waitFor(element(by.id("detox-render-error")))
16
15
  .toExist()
17
16
  .withTimeout(500);
18
17
  }
19
- catch (_a) {
18
+ catch {
20
19
  return; // Element not found — no render error, all good
21
20
  }
22
21
  // Element exists — read the error message and throw
23
- const attrs = (await element(by.id('detox-render-error-message')).getAttributes());
24
- const message = attrs.text || attrs.label || 'Unknown render error';
22
+ const attrs = (await element(by.id("detox-render-error-message")).getAttributes());
23
+ const message = attrs.text || attrs.label || "Unknown render error";
25
24
  throw new Error(`Component render error: ${message}`);
26
25
  }
27
26
  async function mount(componentName, props) {
@@ -33,7 +32,7 @@ async function mount(componentName, props) {
33
32
  };
34
33
  if (props) {
35
34
  Object.entries(props).forEach(([key, value]) => {
36
- if (value && typeof value === 'object' && SPY_MARKER in value) {
35
+ if (value && typeof value === "object" && SPY_MARKER in value) {
37
36
  payload.spies.push(key);
38
37
  }
39
38
  else {
@@ -52,8 +51,8 @@ async function mount(componentName, props) {
52
51
  appLaunched = true;
53
52
  // Harness sets id '0' for the initial launch-args mount
54
53
  try {
55
- await waitFor(element(by.id('detox-mount-id')))
56
- .toHaveText('0')
54
+ await waitFor(element(by.id("detox-mount-id")))
55
+ .toHaveText("0")
57
56
  .withTimeout(5000);
58
57
  }
59
58
  catch (e) {
@@ -68,7 +67,7 @@ function expectSpy(name) {
68
67
  const getExpect = () => expect;
69
68
  return {
70
69
  async toHaveBeenCalled() {
71
- await getExpect()(element(by.id(`spy-${name}-count`))).not.toHaveText('0');
70
+ await getExpect()(element(by.id(`spy-${name}-count`))).not.toHaveText("0");
72
71
  },
73
72
  async toHaveBeenCalledTimes(n) {
74
73
  await getExpect()(element(by.id(`spy-${name}-count`))).toHaveText(String(n));
package/dist/mount.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"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"}
package/dist/test.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { mount, spy, expectSpy } from './mount';
2
- export { debug } from './debug';
1
+ export { mount, spy, expectSpy } from "./mount";
2
+ export { debug } from "./debug";
3
3
  //# sourceMappingURL=test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAC,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
package/dist/test.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;;AAAA,iCAA8C;AAAtC,8FAAA,KAAK,OAAA;AAAE,4FAAA,GAAG,OAAA;AAAE,kGAAA,SAAS,OAAA;AAC7B,iCAA8B;AAAtB,8FAAA,KAAK,OAAA"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;;AAAA,iCAAgD;AAAvC,8FAAA,KAAK,OAAA;AAAE,4FAAA,GAAG,OAAA;AAAE,kGAAA,SAAS,OAAA;AAC9B,iCAAgC;AAAvB,8FAAA,KAAK,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nyby/detox-component-testing",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "description": "Component testing support for Detox and React Native",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -42,10 +42,10 @@
42
42
  "react-native-launch-arguments": "*"
43
43
  },
44
44
  "devDependencies": {
45
+ "@types/node": "^25.5.0",
45
46
  "@types/react": "^19.2.14",
46
47
  "@types/react-native": "^0.72.8",
47
48
  "prettier": "^3.8.1",
48
49
  "typescript": "^5.9.3"
49
- },
50
- "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
50
+ }
51
51
  }
@@ -1,25 +1,36 @@
1
- import React, {Component as ReactComponent, useState, useRef, useCallback, ReactNode} from 'react';
2
- import {View, Text, TextInput, ScrollView} from 'react-native';
3
- import {LaunchArguments} from 'react-native-launch-arguments';
4
- import {getComponent} from './ComponentRegistry';
5
- import {getWrapper} from './configureHarness';
1
+ import React, {
2
+ Component as ReactComponent,
3
+ useState,
4
+ useRef,
5
+ useCallback,
6
+ ReactNode,
7
+ } from "react";
8
+ import { View, Text, TextInput, ScrollView } from "react-native";
9
+ import { LaunchArguments } from "react-native-launch-arguments";
10
+ import { getComponent } from "./ComponentRegistry";
11
+ import { getWrapper } from "./configureHarness";
6
12
 
7
13
  interface ErrorBoundaryState {
8
14
  error: Error | null;
9
15
  }
10
16
 
11
- class RenderErrorBoundary extends ReactComponent<{children: ReactNode}, ErrorBoundaryState> {
12
- state: ErrorBoundaryState = {error: null};
17
+ class RenderErrorBoundary extends ReactComponent<
18
+ { children: ReactNode },
19
+ ErrorBoundaryState
20
+ > {
21
+ state: ErrorBoundaryState = { error: null };
13
22
 
14
23
  static getDerivedStateFromError(error: Error) {
15
- return {error};
24
+ return { error };
16
25
  }
17
26
 
18
27
  render() {
19
28
  if (this.state.error) {
20
29
  return (
21
30
  <ScrollView testID="detox-render-error">
22
- <Text testID="detox-render-error-message">{this.state.error.message}</Text>
31
+ <Text testID="detox-render-error-message">
32
+ {this.state.error.message}
33
+ </Text>
23
34
  </ScrollView>
24
35
  );
25
36
  }
@@ -27,8 +38,8 @@ class RenderErrorBoundary extends ReactComponent<{children: ReactNode}, ErrorBou
27
38
  }
28
39
  }
29
40
 
30
- const PROP_PREFIX = 'detoxProp_';
31
- const SPY_PREFIX = 'detoxSpy_';
41
+ const PROP_PREFIX = "detoxProp_";
42
+ const SPY_PREFIX = "detoxSpy_";
32
43
 
33
44
  interface MountPayload {
34
45
  id: string;
@@ -50,14 +61,14 @@ function parseLaunchArgs(args: Record<string, any>): {
50
61
  spies.push(key.slice(SPY_PREFIX.length));
51
62
  }
52
63
  });
53
- return {props, spies};
64
+ return { props, spies };
54
65
  }
55
66
 
56
67
  export function ComponentHarness() {
57
68
  const launchArgs = LaunchArguments.value() as Record<string, any>;
58
69
  const [mountPayload, setMountPayload] = useState<MountPayload | null>(null);
59
70
 
60
- const handleControl = useCallback((e: {nativeEvent: {text: string}}) => {
71
+ const handleControl = useCallback((e: { nativeEvent: { text: string } }) => {
61
72
  try {
62
73
  setMountPayload(JSON.parse(e.nativeEvent.text));
63
74
  } catch (_e) {}
@@ -67,9 +78,9 @@ export function ComponentHarness() {
67
78
  if (mountPayload) {
68
79
  activeMount = mountPayload;
69
80
  } else if (launchArgs.detoxComponentName) {
70
- const {props, spies} = parseLaunchArgs(launchArgs);
81
+ const { props, spies } = parseLaunchArgs(launchArgs);
71
82
  activeMount = {
72
- id: '0',
83
+ id: "0",
73
84
  name: launchArgs.detoxComponentName as string,
74
85
  props,
75
86
  spies,
@@ -77,12 +88,12 @@ export function ComponentHarness() {
77
88
  }
78
89
 
79
90
  return (
80
- <View style={{flex: 1}}>
91
+ <View style={{ flex: 1 }}>
81
92
  <TextInput
82
93
  testID="detox-harness-control"
83
94
  onEndEditing={handleControl}
84
95
  style={{
85
- position: 'absolute',
96
+ position: "absolute",
86
97
  bottom: 0,
87
98
  left: 0,
88
99
  right: 0,
@@ -93,7 +104,7 @@ export function ComponentHarness() {
93
104
  />
94
105
  {activeMount && (
95
106
  <>
96
- <Text testID="detox-mount-id" style={{height: 1}}>
107
+ <Text testID="detox-mount-id" style={{ height: 1 }}>
97
108
  {activeMount.id}
98
109
  </Text>
99
110
  <RenderErrorBoundary>
@@ -110,13 +121,13 @@ interface SpyData {
110
121
  lastArgs: any[];
111
122
  }
112
123
 
113
- function ComponentRenderer({mount}: {mount: MountPayload}) {
114
- const {Component, defaultProps} = getComponent(mount.name);
124
+ function ComponentRenderer({ mount }: { mount: MountPayload }) {
125
+ const { Component, defaultProps } = getComponent(mount.name);
115
126
  const spyNames = mount.spies || [];
116
127
 
117
128
  const initialData: Record<string, SpyData> = {};
118
129
  spyNames.forEach((name) => {
119
- initialData[name] = {count: 0, lastArgs: []};
130
+ initialData[name] = { count: 0, lastArgs: [] };
120
131
  });
121
132
 
122
133
  const [spyData, setSpyData] = useState(initialData);
@@ -138,17 +149,21 @@ function ComponentRenderer({mount}: {mount: MountPayload}) {
138
149
  spyProps[name] = spyFnsRef.current[name];
139
150
  });
140
151
 
141
- const props = {...defaultProps, ...(mount.props || {}), ...spyProps};
152
+ const props = { ...defaultProps, ...(mount.props || {}), ...spyProps };
142
153
  const Wrapper = getWrapper();
143
154
 
144
155
  return (
145
156
  <Wrapper launchArgs={mount.props || {}}>
146
- <View testID="component-harness-root" style={{flex: 1}}>
157
+ <View testID="component-harness-root" style={{ flex: 1 }}>
147
158
  <Component {...props} />
148
159
  {spyNames.map((name) => (
149
160
  <View key={name}>
150
- <Text testID={`spy-${name}-count`}>{String(spyData[name].count)}</Text>
151
- <Text testID={`spy-${name}-lastArgs`}>{JSON.stringify(spyData[name].lastArgs)}</Text>
161
+ <Text testID={`spy-${name}-count`}>
162
+ {String(spyData[name].count)}
163
+ </Text>
164
+ <Text testID={`spy-${name}-lastArgs`}>
165
+ {JSON.stringify(spyData[name].lastArgs)}
166
+ </Text>
152
167
  </View>
153
168
  ))}
154
169
  </View>
@@ -1,4 +1,4 @@
1
- import {ComponentType} from 'react';
1
+ import { ComponentType } from "react";
2
2
 
3
3
  export interface ComponentEntry<P = any> {
4
4
  Component: ComponentType<P>;
@@ -12,13 +12,16 @@ export function registerComponent<P>(
12
12
  Component: ComponentType<P>,
13
13
  defaultProps?: Partial<P>,
14
14
  ): void;
15
- export function registerComponent<P>(Component: ComponentType<P>, defaultProps?: Partial<P>): void;
15
+ export function registerComponent<P>(
16
+ Component: ComponentType<P>,
17
+ defaultProps?: Partial<P>,
18
+ ): void;
16
19
  export function registerComponent<P>(
17
20
  nameOrComponent: string | ComponentType<P>,
18
21
  componentOrProps?: ComponentType<P> | Partial<P>,
19
22
  defaultProps?: Partial<P>,
20
23
  ): void {
21
- if (typeof nameOrComponent === 'string') {
24
+ if (typeof nameOrComponent === "string") {
22
25
  registry.set(nameOrComponent, {
23
26
  Component: componentOrProps as ComponentType<P>,
24
27
  defaultProps: (defaultProps || {}) as Partial<P>,
@@ -28,7 +31,7 @@ export function registerComponent<P>(
28
31
  const name = Component.displayName || Component.name;
29
32
  if (!name) {
30
33
  throw new Error(
31
- '[detox-component-testing] Component must have a name or displayName to register without an explicit name.',
34
+ "[detox-component-testing] Component must have a name or displayName to register without an explicit name.",
32
35
  );
33
36
  }
34
37
  registry.set(name, {
@@ -1,4 +1,4 @@
1
- import {ComponentType, ReactNode} from 'react';
1
+ import { ComponentType, ReactNode } from "react";
2
2
 
3
3
  export interface WrapperProps {
4
4
  children: ReactNode;
@@ -9,7 +9,7 @@ export interface HarnessConfig {
9
9
  wrapper?: ComponentType<WrapperProps>;
10
10
  }
11
11
 
12
- const DefaultWrapper = ({children}: WrapperProps) => children;
12
+ const DefaultWrapper = ({ children }: WrapperProps) => children;
13
13
 
14
14
  let globalWrapper: ComponentType<WrapperProps> | null = null;
15
15
 
package/src/debug.ts CHANGED
@@ -1,5 +1,5 @@
1
- import {mkdirSync, renameSync, writeFileSync} from 'fs';
2
- import {join} from 'path';
1
+ import { mkdirSync, renameSync, writeFileSync } from "fs";
2
+ import { join } from "path";
3
3
 
4
4
  /**
5
5
  * Capture a screenshot and native view hierarchy to the given directory.
@@ -8,9 +8,12 @@ import {join} from 'path';
8
8
  export async function captureArtifacts(
9
9
  name: string,
10
10
  outputDir: string,
11
- deviceRef: {takeScreenshot: (n: string) => Promise<string>; generateViewHierarchyXml: () => Promise<string>},
11
+ deviceRef: {
12
+ takeScreenshot: (n: string) => Promise<string>;
13
+ generateViewHierarchyXml: () => Promise<string>;
14
+ },
12
15
  ) {
13
- mkdirSync(outputDir, {recursive: true});
16
+ mkdirSync(outputDir, { recursive: true });
14
17
 
15
18
  // Screenshot via Detox, then move to our artifacts dir
16
19
  try {
@@ -23,7 +26,7 @@ export async function captureArtifacts(
23
26
  // Native view hierarchy
24
27
  try {
25
28
  const xml = await deviceRef.generateViewHierarchyXml();
26
- writeFileSync(join(outputDir, `debug-${name}-view.xml`), xml, 'utf8');
29
+ writeFileSync(join(outputDir, `debug-${name}-view.xml`), xml, "utf8");
27
30
  } catch {}
28
31
  }
29
32
 
@@ -40,6 +43,6 @@ let counter = 0;
40
43
 
41
44
  export async function debug(label?: string, outputDir?: string) {
42
45
  const name = label || String(++counter);
43
- const dir = outputDir || join(process.cwd(), 'artifacts');
46
+ const dir = outputDir || join(process.cwd(), "artifacts");
44
47
  await captureArtifacts(name, dir, device);
45
48
  }
@@ -5,6 +5,6 @@ declare const device: {
5
5
  generateViewHierarchyXml(): Promise<string>;
6
6
  };
7
7
  declare function element(matcher: any): any;
8
- declare const by: {id(id: string): any};
8
+ declare const by: { id(id: string): any };
9
9
  declare function waitFor(e: any): any;
10
10
  declare function expect(e: any): any;
@@ -1,14 +1,14 @@
1
- const DetoxCircusEnvironment = require('detox/runners/jest/testEnvironment');
2
- const {join} = require('path');
3
- const {captureArtifacts} = require('./debug');
1
+ const DetoxCircusEnvironment = require("detox/runners/jest/testEnvironment");
2
+ const { join } = require("path");
3
+ const { captureArtifacts } = require("./debug");
4
4
 
5
5
  class CustomDetoxEnvironment extends DetoxCircusEnvironment {
6
6
  async handleTestEvent(event, state) {
7
7
  await super.handleTestEvent(event, state);
8
8
 
9
- if (event.name === 'test_done' && event.test.errors.length > 0) {
10
- const safeName = event.test.name.replace(/[^a-zA-Z0-9_-]/g, '_');
11
- const outputDir = join(process.cwd(), 'artifacts');
9
+ if (event.name === "test_done" && event.test.errors.length > 0) {
10
+ const safeName = event.test.name.replace(/[^a-zA-Z0-9_-]/g, "_");
11
+ const outputDir = join(process.cwd(), "artifacts");
12
12
  await captureArtifacts(safeName, outputDir, this.global.device);
13
13
  }
14
14
  }
package/src/index.ts CHANGED
@@ -1,3 +1,7 @@
1
- export {registerComponent} from './ComponentRegistry';
2
- export {ComponentHarness} from './ComponentHarness';
3
- export {configureHarness, WrapperProps, HarnessConfig} from './configureHarness';
1
+ export { registerComponent } from "./ComponentRegistry";
2
+ export { ComponentHarness } from "./ComponentHarness";
3
+ export {
4
+ configureHarness,
5
+ WrapperProps,
6
+ HarnessConfig,
7
+ } from "./configureHarness";
package/src/mount.ts CHANGED
@@ -9,32 +9,37 @@ export interface SpyExpectation {
9
9
  lastCalledWith(...args: any[]): Promise<void>;
10
10
  }
11
11
 
12
- const SPY_MARKER = '__detoxSpy__' as const;
12
+ const SPY_MARKER = "__detoxSpy__" as const;
13
13
 
14
14
  let mountCounter = 0;
15
15
  let appLaunched = false;
16
16
 
17
17
  export function spy(name: string): SpyMarker {
18
- return {[SPY_MARKER]: true, name};
18
+ return { [SPY_MARKER]: true, name };
19
19
  }
20
20
 
21
21
  type MountProps = Record<string, string | number | boolean | SpyMarker>;
22
22
 
23
- export async function assertNoRenderError(): Promise<void> {
23
+ async function assertNoRenderError(): Promise<void> {
24
24
  try {
25
- await waitFor(element(by.id('detox-render-error')))
25
+ await waitFor(element(by.id("detox-render-error")))
26
26
  .toExist()
27
27
  .withTimeout(500);
28
28
  } catch {
29
29
  return; // Element not found — no render error, all good
30
30
  }
31
31
  // Element exists — read the error message and throw
32
- const attrs = (await element(by.id('detox-render-error-message')).getAttributes()) as any;
33
- const message = attrs.text || attrs.label || 'Unknown render error';
32
+ const attrs = (await element(
33
+ by.id("detox-render-error-message"),
34
+ ).getAttributes()) as any;
35
+ const message = attrs.text || attrs.label || "Unknown render error";
34
36
  throw new Error(`Component render error: ${message}`);
35
37
  }
36
38
 
37
- export async function mount(componentName: string, props?: MountProps): Promise<void> {
39
+ export async function mount(
40
+ componentName: string,
41
+ props?: MountProps,
42
+ ): Promise<void> {
38
43
  const payload = {
39
44
  id: String(++mountCounter),
40
45
  name: componentName,
@@ -44,7 +49,7 @@ export async function mount(componentName: string, props?: MountProps): Promise<
44
49
 
45
50
  if (props) {
46
51
  Object.entries(props).forEach(([key, value]) => {
47
- if (value && typeof value === 'object' && SPY_MARKER in value) {
52
+ if (value && typeof value === "object" && SPY_MARKER in value) {
48
53
  payload.spies.push(key);
49
54
  } else {
50
55
  payload.props[key] = value;
@@ -52,19 +57,19 @@ export async function mount(componentName: string, props?: MountProps): Promise<
52
57
  });
53
58
  }
54
59
 
55
- const launchArgs: Record<string, any> = {detoxComponentName: componentName};
60
+ const launchArgs: Record<string, any> = { detoxComponentName: componentName };
56
61
  Object.entries(payload.props).forEach(([key, value]) => {
57
62
  launchArgs[`detoxProp_${key}`] = value;
58
63
  });
59
64
  payload.spies.forEach((name) => {
60
65
  launchArgs[`detoxSpy_${name}`] = true;
61
66
  });
62
- await device.launchApp({newInstance: true, launchArgs});
67
+ await device.launchApp({ newInstance: true, launchArgs });
63
68
  appLaunched = true;
64
69
  // Harness sets id '0' for the initial launch-args mount
65
70
  try {
66
- await waitFor(element(by.id('detox-mount-id')))
67
- .toHaveText('0')
71
+ await waitFor(element(by.id("detox-mount-id")))
72
+ .toHaveText("0")
68
73
  .withTimeout(5000);
69
74
  } catch (e) {
70
75
  await assertNoRenderError(); // Throws with the actual error if one exists
@@ -79,13 +84,19 @@ export function expectSpy(name: string): SpyExpectation {
79
84
  const getExpect = () => expect as unknown as (e: any) => any;
80
85
  return {
81
86
  async toHaveBeenCalled() {
82
- await getExpect()(element(by.id(`spy-${name}-count`))).not.toHaveText('0');
87
+ await getExpect()(element(by.id(`spy-${name}-count`))).not.toHaveText(
88
+ "0",
89
+ );
83
90
  },
84
91
  async toHaveBeenCalledTimes(n: number) {
85
- await getExpect()(element(by.id(`spy-${name}-count`))).toHaveText(String(n));
92
+ await getExpect()(element(by.id(`spy-${name}-count`))).toHaveText(
93
+ String(n),
94
+ );
86
95
  },
87
96
  async lastCalledWith(...args: any[]) {
88
- await getExpect()(element(by.id(`spy-${name}-lastArgs`))).toHaveText(JSON.stringify(args));
97
+ await getExpect()(element(by.id(`spy-${name}-lastArgs`))).toHaveText(
98
+ JSON.stringify(args),
99
+ );
89
100
  },
90
101
  };
91
102
  }
package/src/test.ts CHANGED
@@ -1,2 +1,2 @@
1
- export {mount, spy, expectSpy} from './mount';
2
- export {debug} from './debug';
1
+ export { mount, spy, expectSpy } from "./mount";
2
+ export { debug } from "./debug";