@testing-library/react-native 13.2.2 → 13.3.0-beta.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/build/fire-event.d.ts +7 -0
- package/build/fire-event.js +20 -0
- package/build/fire-event.js.map +1 -1
- package/build/pure.d.ts +3 -1
- package/build/pure.js +15 -1
- package/build/pure.js.map +1 -1
- package/build/render-act.d.ts +1 -0
- package/build/render-act.js +13 -0
- package/build/render-act.js.map +1 -1
- package/build/render-async.d.ts +104 -0
- package/build/render-async.js +104 -0
- package/build/render-async.js.map +1 -0
- package/build/render.d.ts +8 -2
- package/build/render.js +24 -11
- package/build/render.js.map +1 -1
- package/build/screen.js +4 -1
- package/build/screen.js.map +1 -1
- package/build/test-utils/console.d.ts +1 -0
- package/build/test-utils/console.js +17 -0
- package/build/test-utils/console.js.map +1 -0
- package/build/tsconfig.release.tsbuildinfo +1 -1
- package/build/user-event/clear.js +4 -4
- package/build/user-event/clear.js.map +1 -1
- package/build/user-event/paste.js +8 -8
- package/build/user-event/paste.js.map +1 -1
- package/build/user-event/press/press.js +6 -6
- package/build/user-event/press/press.js.map +1 -1
- package/build/user-event/scroll/scroll-to.js +7 -7
- package/build/user-event/scroll/scroll-to.js.map +1 -1
- package/build/user-event/type/type.js +11 -11
- package/build/user-event/type/type.js.map +1 -1
- package/build/user-event/utils/dispatch-event.d.ts +1 -1
- package/build/user-event/utils/dispatch-event.js +3 -3
- package/build/user-event/utils/dispatch-event.js.map +1 -1
- package/build/wait-for.js +3 -1
- package/build/wait-for.js.map +1 -1
- package/package.json +1 -1
- package/build/test-utils/index.d.ts +0 -1
- package/build/test-utils/index.js +0 -17
- package/build/test-utils/index.js.map +0 -1
package/build/fire-event.d.ts
CHANGED
|
@@ -13,4 +13,11 @@ declare namespace fireEvent {
|
|
|
13
13
|
var changeText: (element: ReactTestInstance, ...data: unknown[]) => undefined;
|
|
14
14
|
var scroll: (element: ReactTestInstance, ...data: unknown[]) => undefined;
|
|
15
15
|
}
|
|
16
|
+
declare function fireEventAsync(element: ReactTestInstance, eventName: EventName, ...data: unknown[]): Promise<undefined>;
|
|
17
|
+
declare namespace fireEventAsync {
|
|
18
|
+
var press: (element: ReactTestInstance, ...data: unknown[]) => Promise<undefined>;
|
|
19
|
+
var changeText: (element: ReactTestInstance, ...data: unknown[]) => Promise<undefined>;
|
|
20
|
+
var scroll: (element: ReactTestInstance, ...data: unknown[]) => Promise<undefined>;
|
|
21
|
+
}
|
|
22
|
+
export { fireEventAsync };
|
|
16
23
|
export default fireEvent;
|
package/build/fire-event.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
exports.fireEventAsync = fireEventAsync;
|
|
7
8
|
exports.isEventEnabled = isEventEnabled;
|
|
8
9
|
exports.isTouchResponder = isTouchResponder;
|
|
9
10
|
var _act = _interopRequireDefault(require("./act"));
|
|
@@ -84,6 +85,25 @@ function fireEvent(element, eventName, ...data) {
|
|
|
84
85
|
fireEvent.press = (element, ...data) => fireEvent(element, 'press', ...data);
|
|
85
86
|
fireEvent.changeText = (element, ...data) => fireEvent(element, 'changeText', ...data);
|
|
86
87
|
fireEvent.scroll = (element, ...data) => fireEvent(element, 'scroll', ...data);
|
|
88
|
+
async function fireEventAsync(element, eventName, ...data) {
|
|
89
|
+
if (!(0, _componentTree.isElementMounted)(element)) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
setNativeStateIfNeeded(element, eventName, data[0]);
|
|
93
|
+
const handler = findEventHandler(element, eventName);
|
|
94
|
+
if (!handler) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
let returnValue;
|
|
98
|
+
// eslint-disable-next-line require-await
|
|
99
|
+
await (0, _act.default)(async () => {
|
|
100
|
+
returnValue = handler(...data);
|
|
101
|
+
});
|
|
102
|
+
return returnValue;
|
|
103
|
+
}
|
|
104
|
+
fireEventAsync.press = async (element, ...data) => await fireEventAsync(element, 'press', ...data);
|
|
105
|
+
fireEventAsync.changeText = async (element, ...data) => await fireEventAsync(element, 'changeText', ...data);
|
|
106
|
+
fireEventAsync.scroll = async (element, ...data) => await fireEventAsync(element, 'scroll', ...data);
|
|
87
107
|
var _default = exports.default = fireEvent;
|
|
88
108
|
const scrollEventNames = new Set(['scroll', 'scrollBeginDrag', 'scrollEndDrag', 'momentumScrollBegin', 'momentumScrollEnd']);
|
|
89
109
|
function setNativeStateIfNeeded(element, eventName, value) {
|
package/build/fire-event.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fire-event.js","names":["_act","_interopRequireDefault","require","_eventHandler","_componentTree","_hostComponentNames","_pointerEvents","_textInput","_nativeState","e","__esModule","default","isTouchResponder","element","isHostElement","Boolean","props","onStartShouldSetResponder","isHostTextInput","eventsAffectedByPointerEventsProp","Set","textInputEventsIgnoringEditableProp","isEventEnabled","eventName","nearestTouchResponder","isEditableTextInput","has","isPointerEventEnabled","touchStart","touchMove","onMoveShouldSetResponder","undefined","findEventHandler","touchResponder","handler","getEventHandler","loose","parent","fireEvent","data","isElementMounted","setNativeStateIfNeeded","returnValue","act","press","changeText","scroll","_default","exports","scrollEventNames","value","nativeState","valueForElement","set","isHostScrollView","contentOffset","tryGetContentOffset","contentOffsetForElement","event","nativeEvent","x","y","Number","isFinite"],"sources":["../src/fire-event.ts"],"sourcesContent":["import type {\n PressableProps,\n ScrollViewProps,\n TextInputProps,\n TextProps,\n ViewProps,\n} from 'react-native';\nimport type { ReactTestInstance } from 'react-test-renderer';\n\nimport act from './act';\nimport { getEventHandler } from './event-handler';\nimport { isElementMounted, isHostElement } from './helpers/component-tree';\nimport { isHostScrollView, isHostTextInput } from './helpers/host-component-names';\nimport { isPointerEventEnabled } from './helpers/pointer-events';\nimport { isEditableTextInput } from './helpers/text-input';\nimport { nativeState } from './native-state';\nimport type { Point, StringWithAutocomplete } from './types';\n\ntype EventHandler = (...args: unknown[]) => unknown;\n\nexport function isTouchResponder(element: ReactTestInstance) {\n if (!isHostElement(element)) {\n return false;\n }\n\n return Boolean(element.props.onStartShouldSetResponder) || isHostTextInput(element);\n}\n\n/**\n * List of events affected by `pointerEvents` prop.\n *\n * Note: `fireEvent` is accepting both `press` and `onPress` for event names,\n * so we need cover both forms.\n */\nconst eventsAffectedByPointerEventsProp = new Set(['press', 'onPress']);\n\n/**\n * List of `TextInput` events not affected by `editable` prop.\n *\n * Note: `fireEvent` is accepting both `press` and `onPress` for event names,\n * so we need cover both forms.\n */\nconst textInputEventsIgnoringEditableProp = new Set([\n 'contentSizeChange',\n 'onContentSizeChange',\n 'layout',\n 'onLayout',\n 'scroll',\n 'onScroll',\n]);\n\nexport function isEventEnabled(\n element: ReactTestInstance,\n eventName: string,\n nearestTouchResponder?: ReactTestInstance,\n) {\n if (nearestTouchResponder != null && isHostTextInput(nearestTouchResponder)) {\n return (\n isEditableTextInput(nearestTouchResponder) ||\n textInputEventsIgnoringEditableProp.has(eventName)\n );\n }\n\n if (eventsAffectedByPointerEventsProp.has(eventName) && !isPointerEventEnabled(element)) {\n return false;\n }\n\n const touchStart = nearestTouchResponder?.props.onStartShouldSetResponder?.();\n const touchMove = nearestTouchResponder?.props.onMoveShouldSetResponder?.();\n if (touchStart || touchMove) {\n return true;\n }\n\n return touchStart === undefined && touchMove === undefined;\n}\n\nfunction findEventHandler(\n element: ReactTestInstance,\n eventName: string,\n nearestTouchResponder?: ReactTestInstance,\n): EventHandler | null {\n const touchResponder = isTouchResponder(element) ? element : nearestTouchResponder;\n\n const handler = getEventHandler(element, eventName, { loose: true });\n if (handler && isEventEnabled(element, eventName, touchResponder)) {\n return handler;\n }\n\n if (element.parent === null) {\n return null;\n }\n\n return findEventHandler(element.parent, eventName, touchResponder);\n}\n\n// String union type of keys of T that start with on, stripped of 'on'\ntype EventNameExtractor<T> = keyof {\n [K in keyof T as K extends `on${infer Rest}` ? Uncapitalize<Rest> : never]: T[K];\n};\n\ntype EventName = StringWithAutocomplete<\n | EventNameExtractor<ViewProps>\n | EventNameExtractor<TextProps>\n | EventNameExtractor<TextInputProps>\n | EventNameExtractor<PressableProps>\n | EventNameExtractor<ScrollViewProps>\n>;\n\nfunction fireEvent(element: ReactTestInstance, eventName: EventName, ...data: unknown[]) {\n if (!isElementMounted(element)) {\n return;\n }\n\n setNativeStateIfNeeded(element, eventName, data[0]);\n\n const handler = findEventHandler(element, eventName);\n if (!handler) {\n return;\n }\n\n let returnValue;\n void act(() => {\n returnValue = handler(...data);\n });\n\n return returnValue;\n}\n\nfireEvent.press = (element: ReactTestInstance, ...data: unknown[]) =>\n fireEvent(element, 'press', ...data);\n\nfireEvent.changeText = (element: ReactTestInstance, ...data: unknown[]) =>\n fireEvent(element, 'changeText', ...data);\n\nfireEvent.scroll = (element: ReactTestInstance, ...data: unknown[]) =>\n fireEvent(element, 'scroll', ...data);\n\nexport default fireEvent;\n\nconst scrollEventNames = new Set([\n 'scroll',\n 'scrollBeginDrag',\n 'scrollEndDrag',\n 'momentumScrollBegin',\n 'momentumScrollEnd',\n]);\n\nfunction setNativeStateIfNeeded(element: ReactTestInstance, eventName: string, value: unknown) {\n if (eventName === 'changeText' && typeof value === 'string' && isEditableTextInput(element)) {\n nativeState.valueForElement.set(element, value);\n }\n\n if (scrollEventNames.has(eventName) && isHostScrollView(element)) {\n const contentOffset = tryGetContentOffset(value);\n if (contentOffset) {\n nativeState.contentOffsetForElement.set(element, contentOffset);\n }\n }\n}\n\nfunction tryGetContentOffset(event: unknown): Point | null {\n try {\n // @ts-expect-error: try to extract contentOffset from the event value\n const contentOffset = event?.nativeEvent?.contentOffset;\n const x = contentOffset?.x;\n const y = contentOffset?.y;\n if (typeof x === 'number' || typeof y === 'number') {\n return {\n x: Number.isFinite(x) ? x : 0,\n y: Number.isFinite(y) ? y : 0,\n };\n }\n } catch {\n // Do nothing\n }\n\n return null;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"fire-event.js","names":["_act","_interopRequireDefault","require","_eventHandler","_componentTree","_hostComponentNames","_pointerEvents","_textInput","_nativeState","e","__esModule","default","isTouchResponder","element","isHostElement","Boolean","props","onStartShouldSetResponder","isHostTextInput","eventsAffectedByPointerEventsProp","Set","textInputEventsIgnoringEditableProp","isEventEnabled","eventName","nearestTouchResponder","isEditableTextInput","has","isPointerEventEnabled","touchStart","touchMove","onMoveShouldSetResponder","undefined","findEventHandler","touchResponder","handler","getEventHandler","loose","parent","fireEvent","data","isElementMounted","setNativeStateIfNeeded","returnValue","act","press","changeText","scroll","fireEventAsync","_default","exports","scrollEventNames","value","nativeState","valueForElement","set","isHostScrollView","contentOffset","tryGetContentOffset","contentOffsetForElement","event","nativeEvent","x","y","Number","isFinite"],"sources":["../src/fire-event.ts"],"sourcesContent":["import type {\n PressableProps,\n ScrollViewProps,\n TextInputProps,\n TextProps,\n ViewProps,\n} from 'react-native';\nimport type { ReactTestInstance } from 'react-test-renderer';\n\nimport act from './act';\nimport { getEventHandler } from './event-handler';\nimport { isElementMounted, isHostElement } from './helpers/component-tree';\nimport { isHostScrollView, isHostTextInput } from './helpers/host-component-names';\nimport { isPointerEventEnabled } from './helpers/pointer-events';\nimport { isEditableTextInput } from './helpers/text-input';\nimport { nativeState } from './native-state';\nimport type { Point, StringWithAutocomplete } from './types';\n\ntype EventHandler = (...args: unknown[]) => unknown;\n\nexport function isTouchResponder(element: ReactTestInstance) {\n if (!isHostElement(element)) {\n return false;\n }\n\n return Boolean(element.props.onStartShouldSetResponder) || isHostTextInput(element);\n}\n\n/**\n * List of events affected by `pointerEvents` prop.\n *\n * Note: `fireEvent` is accepting both `press` and `onPress` for event names,\n * so we need cover both forms.\n */\nconst eventsAffectedByPointerEventsProp = new Set(['press', 'onPress']);\n\n/**\n * List of `TextInput` events not affected by `editable` prop.\n *\n * Note: `fireEvent` is accepting both `press` and `onPress` for event names,\n * so we need cover both forms.\n */\nconst textInputEventsIgnoringEditableProp = new Set([\n 'contentSizeChange',\n 'onContentSizeChange',\n 'layout',\n 'onLayout',\n 'scroll',\n 'onScroll',\n]);\n\nexport function isEventEnabled(\n element: ReactTestInstance,\n eventName: string,\n nearestTouchResponder?: ReactTestInstance,\n) {\n if (nearestTouchResponder != null && isHostTextInput(nearestTouchResponder)) {\n return (\n isEditableTextInput(nearestTouchResponder) ||\n textInputEventsIgnoringEditableProp.has(eventName)\n );\n }\n\n if (eventsAffectedByPointerEventsProp.has(eventName) && !isPointerEventEnabled(element)) {\n return false;\n }\n\n const touchStart = nearestTouchResponder?.props.onStartShouldSetResponder?.();\n const touchMove = nearestTouchResponder?.props.onMoveShouldSetResponder?.();\n if (touchStart || touchMove) {\n return true;\n }\n\n return touchStart === undefined && touchMove === undefined;\n}\n\nfunction findEventHandler(\n element: ReactTestInstance,\n eventName: string,\n nearestTouchResponder?: ReactTestInstance,\n): EventHandler | null {\n const touchResponder = isTouchResponder(element) ? element : nearestTouchResponder;\n\n const handler = getEventHandler(element, eventName, { loose: true });\n if (handler && isEventEnabled(element, eventName, touchResponder)) {\n return handler;\n }\n\n if (element.parent === null) {\n return null;\n }\n\n return findEventHandler(element.parent, eventName, touchResponder);\n}\n\n// String union type of keys of T that start with on, stripped of 'on'\ntype EventNameExtractor<T> = keyof {\n [K in keyof T as K extends `on${infer Rest}` ? Uncapitalize<Rest> : never]: T[K];\n};\n\ntype EventName = StringWithAutocomplete<\n | EventNameExtractor<ViewProps>\n | EventNameExtractor<TextProps>\n | EventNameExtractor<TextInputProps>\n | EventNameExtractor<PressableProps>\n | EventNameExtractor<ScrollViewProps>\n>;\n\nfunction fireEvent(element: ReactTestInstance, eventName: EventName, ...data: unknown[]) {\n if (!isElementMounted(element)) {\n return;\n }\n\n setNativeStateIfNeeded(element, eventName, data[0]);\n\n const handler = findEventHandler(element, eventName);\n if (!handler) {\n return;\n }\n\n let returnValue;\n void act(() => {\n returnValue = handler(...data);\n });\n\n return returnValue;\n}\n\nfireEvent.press = (element: ReactTestInstance, ...data: unknown[]) =>\n fireEvent(element, 'press', ...data);\n\nfireEvent.changeText = (element: ReactTestInstance, ...data: unknown[]) =>\n fireEvent(element, 'changeText', ...data);\n\nfireEvent.scroll = (element: ReactTestInstance, ...data: unknown[]) =>\n fireEvent(element, 'scroll', ...data);\n\nasync function fireEventAsync(\n element: ReactTestInstance,\n eventName: EventName,\n ...data: unknown[]\n) {\n if (!isElementMounted(element)) {\n return;\n }\n\n setNativeStateIfNeeded(element, eventName, data[0]);\n\n const handler = findEventHandler(element, eventName);\n if (!handler) {\n return;\n }\n\n let returnValue;\n // eslint-disable-next-line require-await\n await act(async () => {\n returnValue = handler(...data);\n });\n\n return returnValue;\n}\n\nfireEventAsync.press = async (element: ReactTestInstance, ...data: unknown[]) =>\n await fireEventAsync(element, 'press', ...data);\n\nfireEventAsync.changeText = async (element: ReactTestInstance, ...data: unknown[]) =>\n await fireEventAsync(element, 'changeText', ...data);\n\nfireEventAsync.scroll = async (element: ReactTestInstance, ...data: unknown[]) =>\n await fireEventAsync(element, 'scroll', ...data);\n\nexport { fireEventAsync };\nexport default fireEvent;\n\nconst scrollEventNames = new Set([\n 'scroll',\n 'scrollBeginDrag',\n 'scrollEndDrag',\n 'momentumScrollBegin',\n 'momentumScrollEnd',\n]);\n\nfunction setNativeStateIfNeeded(element: ReactTestInstance, eventName: string, value: unknown) {\n if (eventName === 'changeText' && typeof value === 'string' && isEditableTextInput(element)) {\n nativeState.valueForElement.set(element, value);\n }\n\n if (scrollEventNames.has(eventName) && isHostScrollView(element)) {\n const contentOffset = tryGetContentOffset(value);\n if (contentOffset) {\n nativeState.contentOffsetForElement.set(element, contentOffset);\n }\n }\n}\n\nfunction tryGetContentOffset(event: unknown): Point | null {\n try {\n // @ts-expect-error: try to extract contentOffset from the event value\n const contentOffset = event?.nativeEvent?.contentOffset;\n const x = contentOffset?.x;\n const y = contentOffset?.y;\n if (typeof x === 'number' || typeof y === 'number') {\n return {\n x: Number.isFinite(x) ? x : 0,\n y: Number.isFinite(y) ? y : 0,\n };\n }\n } catch {\n // Do nothing\n }\n\n return null;\n}\n"],"mappings":";;;;;;;;;AASA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAH,OAAA;AACA,IAAAI,cAAA,GAAAJ,OAAA;AACA,IAAAK,UAAA,GAAAL,OAAA;AACA,IAAAM,YAAA,GAAAN,OAAA;AAA6C,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAKtC,SAASG,gBAAgBA,CAACC,OAA0B,EAAE;EAC3D,IAAI,CAAC,IAAAC,4BAAa,EAACD,OAAO,CAAC,EAAE;IAC3B,OAAO,KAAK;EACd;EAEA,OAAOE,OAAO,CAACF,OAAO,CAACG,KAAK,CAACC,yBAAyB,CAAC,IAAI,IAAAC,mCAAe,EAACL,OAAO,CAAC;AACrF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,iCAAiC,GAAG,IAAIC,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;;AAEvE;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,mCAAmC,GAAG,IAAID,GAAG,CAAC,CAClD,mBAAmB,EACnB,qBAAqB,EACrB,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,UAAU,CACX,CAAC;AAEK,SAASE,cAAcA,CAC5BT,OAA0B,EAC1BU,SAAiB,EACjBC,qBAAyC,EACzC;EACA,IAAIA,qBAAqB,IAAI,IAAI,IAAI,IAAAN,mCAAe,EAACM,qBAAqB,CAAC,EAAE;IAC3E,OACE,IAAAC,8BAAmB,EAACD,qBAAqB,CAAC,IAC1CH,mCAAmC,CAACK,GAAG,CAACH,SAAS,CAAC;EAEtD;EAEA,IAAIJ,iCAAiC,CAACO,GAAG,CAACH,SAAS,CAAC,IAAI,CAAC,IAAAI,oCAAqB,EAACd,OAAO,CAAC,EAAE;IACvF,OAAO,KAAK;EACd;EAEA,MAAMe,UAAU,GAAGJ,qBAAqB,EAAER,KAAK,CAACC,yBAAyB,GAAG,CAAC;EAC7E,MAAMY,SAAS,GAAGL,qBAAqB,EAAER,KAAK,CAACc,wBAAwB,GAAG,CAAC;EAC3E,IAAIF,UAAU,IAAIC,SAAS,EAAE;IAC3B,OAAO,IAAI;EACb;EAEA,OAAOD,UAAU,KAAKG,SAAS,IAAIF,SAAS,KAAKE,SAAS;AAC5D;AAEA,SAASC,gBAAgBA,CACvBnB,OAA0B,EAC1BU,SAAiB,EACjBC,qBAAyC,EACpB;EACrB,MAAMS,cAAc,GAAGrB,gBAAgB,CAACC,OAAO,CAAC,GAAGA,OAAO,GAAGW,qBAAqB;EAElF,MAAMU,OAAO,GAAG,IAAAC,6BAAe,EAACtB,OAAO,EAAEU,SAAS,EAAE;IAAEa,KAAK,EAAE;EAAK,CAAC,CAAC;EACpE,IAAIF,OAAO,IAAIZ,cAAc,CAACT,OAAO,EAAEU,SAAS,EAAEU,cAAc,CAAC,EAAE;IACjE,OAAOC,OAAO;EAChB;EAEA,IAAIrB,OAAO,CAACwB,MAAM,KAAK,IAAI,EAAE;IAC3B,OAAO,IAAI;EACb;EAEA,OAAOL,gBAAgB,CAACnB,OAAO,CAACwB,MAAM,EAAEd,SAAS,EAAEU,cAAc,CAAC;AACpE;;AAEA;;AAaA,SAASK,SAASA,CAACzB,OAA0B,EAAEU,SAAoB,EAAE,GAAGgB,IAAe,EAAE;EACvF,IAAI,CAAC,IAAAC,+BAAgB,EAAC3B,OAAO,CAAC,EAAE;IAC9B;EACF;EAEA4B,sBAAsB,CAAC5B,OAAO,EAAEU,SAAS,EAAEgB,IAAI,CAAC,CAAC,CAAC,CAAC;EAEnD,MAAML,OAAO,GAAGF,gBAAgB,CAACnB,OAAO,EAAEU,SAAS,CAAC;EACpD,IAAI,CAACW,OAAO,EAAE;IACZ;EACF;EAEA,IAAIQ,WAAW;EACf,KAAK,IAAAC,YAAG,EAAC,MAAM;IACbD,WAAW,GAAGR,OAAO,CAAC,GAAGK,IAAI,CAAC;EAChC,CAAC,CAAC;EAEF,OAAOG,WAAW;AACpB;AAEAJ,SAAS,CAACM,KAAK,GAAG,CAAC/B,OAA0B,EAAE,GAAG0B,IAAe,KAC/DD,SAAS,CAACzB,OAAO,EAAE,OAAO,EAAE,GAAG0B,IAAI,CAAC;AAEtCD,SAAS,CAACO,UAAU,GAAG,CAAChC,OAA0B,EAAE,GAAG0B,IAAe,KACpED,SAAS,CAACzB,OAAO,EAAE,YAAY,EAAE,GAAG0B,IAAI,CAAC;AAE3CD,SAAS,CAACQ,MAAM,GAAG,CAACjC,OAA0B,EAAE,GAAG0B,IAAe,KAChED,SAAS,CAACzB,OAAO,EAAE,QAAQ,EAAE,GAAG0B,IAAI,CAAC;AAEvC,eAAeQ,cAAcA,CAC3BlC,OAA0B,EAC1BU,SAAoB,EACpB,GAAGgB,IAAe,EAClB;EACA,IAAI,CAAC,IAAAC,+BAAgB,EAAC3B,OAAO,CAAC,EAAE;IAC9B;EACF;EAEA4B,sBAAsB,CAAC5B,OAAO,EAAEU,SAAS,EAAEgB,IAAI,CAAC,CAAC,CAAC,CAAC;EAEnD,MAAML,OAAO,GAAGF,gBAAgB,CAACnB,OAAO,EAAEU,SAAS,CAAC;EACpD,IAAI,CAACW,OAAO,EAAE;IACZ;EACF;EAEA,IAAIQ,WAAW;EACf;EACA,MAAM,IAAAC,YAAG,EAAC,YAAY;IACpBD,WAAW,GAAGR,OAAO,CAAC,GAAGK,IAAI,CAAC;EAChC,CAAC,CAAC;EAEF,OAAOG,WAAW;AACpB;AAEAK,cAAc,CAACH,KAAK,GAAG,OAAO/B,OAA0B,EAAE,GAAG0B,IAAe,KAC1E,MAAMQ,cAAc,CAAClC,OAAO,EAAE,OAAO,EAAE,GAAG0B,IAAI,CAAC;AAEjDQ,cAAc,CAACF,UAAU,GAAG,OAAOhC,OAA0B,EAAE,GAAG0B,IAAe,KAC/E,MAAMQ,cAAc,CAAClC,OAAO,EAAE,YAAY,EAAE,GAAG0B,IAAI,CAAC;AAEtDQ,cAAc,CAACD,MAAM,GAAG,OAAOjC,OAA0B,EAAE,GAAG0B,IAAe,KAC3E,MAAMQ,cAAc,CAAClC,OAAO,EAAE,QAAQ,EAAE,GAAG0B,IAAI,CAAC;AAAC,IAAAS,QAAA,GAAAC,OAAA,CAAAtC,OAAA,GAGpC2B,SAAS;AAExB,MAAMY,gBAAgB,GAAG,IAAI9B,GAAG,CAAC,CAC/B,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,CACpB,CAAC;AAEF,SAASqB,sBAAsBA,CAAC5B,OAA0B,EAAEU,SAAiB,EAAE4B,KAAc,EAAE;EAC7F,IAAI5B,SAAS,KAAK,YAAY,IAAI,OAAO4B,KAAK,KAAK,QAAQ,IAAI,IAAA1B,8BAAmB,EAACZ,OAAO,CAAC,EAAE;IAC3FuC,wBAAW,CAACC,eAAe,CAACC,GAAG,CAACzC,OAAO,EAAEsC,KAAK,CAAC;EACjD;EAEA,IAAID,gBAAgB,CAACxB,GAAG,CAACH,SAAS,CAAC,IAAI,IAAAgC,oCAAgB,EAAC1C,OAAO,CAAC,EAAE;IAChE,MAAM2C,aAAa,GAAGC,mBAAmB,CAACN,KAAK,CAAC;IAChD,IAAIK,aAAa,EAAE;MACjBJ,wBAAW,CAACM,uBAAuB,CAACJ,GAAG,CAACzC,OAAO,EAAE2C,aAAa,CAAC;IACjE;EACF;AACF;AAEA,SAASC,mBAAmBA,CAACE,KAAc,EAAgB;EACzD,IAAI;IACF;IACA,MAAMH,aAAa,GAAGG,KAAK,EAAEC,WAAW,EAAEJ,aAAa;IACvD,MAAMK,CAAC,GAAGL,aAAa,EAAEK,CAAC;IAC1B,MAAMC,CAAC,GAAGN,aAAa,EAAEM,CAAC;IAC1B,IAAI,OAAOD,CAAC,KAAK,QAAQ,IAAI,OAAOC,CAAC,KAAK,QAAQ,EAAE;MAClD,OAAO;QACLD,CAAC,EAAEE,MAAM,CAACC,QAAQ,CAACH,CAAC,CAAC,GAAGA,CAAC,GAAG,CAAC;QAC7BC,CAAC,EAAEC,MAAM,CAACC,QAAQ,CAACF,CAAC,CAAC,GAAGA,CAAC,GAAG;MAC9B,CAAC;IACH;EACF,CAAC,CAAC,MAAM;IACN;EAAA;EAGF,OAAO,IAAI;AACb","ignoreList":[]}
|
package/build/pure.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { default as act } from './act';
|
|
2
2
|
export { default as cleanup } from './cleanup';
|
|
3
|
-
export { default as fireEvent } from './fire-event';
|
|
3
|
+
export { default as fireEvent, fireEventAsync } from './fire-event';
|
|
4
4
|
export { default as render } from './render';
|
|
5
|
+
export { default as renderAsync } from './render-async';
|
|
5
6
|
export { default as waitFor } from './wait-for';
|
|
6
7
|
export { default as waitForElementToBeRemoved } from './wait-for-element-to-be-removed';
|
|
7
8
|
export { within, getQueriesForElement } from './within';
|
|
@@ -12,6 +13,7 @@ export { renderHook } from './render-hook';
|
|
|
12
13
|
export { screen } from './screen';
|
|
13
14
|
export { userEvent } from './user-event';
|
|
14
15
|
export type { RenderOptions, RenderResult, RenderResult as RenderAPI, DebugFunction, } from './render';
|
|
16
|
+
export type { RenderAsyncOptions, RenderAsyncResult } from './render-async';
|
|
15
17
|
export type { RenderHookOptions, RenderHookResult } from './render-hook';
|
|
16
18
|
export type { Config } from './config';
|
|
17
19
|
export type { UserEventConfig } from './user-event';
|
package/build/pure.js
CHANGED
|
@@ -27,6 +27,12 @@ Object.defineProperty(exports, "fireEvent", {
|
|
|
27
27
|
return _fireEvent.default;
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
|
+
Object.defineProperty(exports, "fireEventAsync", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _fireEvent.fireEventAsync;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
30
36
|
Object.defineProperty(exports, "getDefaultNormalizer", {
|
|
31
37
|
enumerable: true,
|
|
32
38
|
get: function () {
|
|
@@ -57,6 +63,12 @@ Object.defineProperty(exports, "render", {
|
|
|
57
63
|
return _render.default;
|
|
58
64
|
}
|
|
59
65
|
});
|
|
66
|
+
Object.defineProperty(exports, "renderAsync", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
get: function () {
|
|
69
|
+
return _renderAsync.default;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
60
72
|
Object.defineProperty(exports, "renderHook", {
|
|
61
73
|
enumerable: true,
|
|
62
74
|
get: function () {
|
|
@@ -101,8 +113,9 @@ Object.defineProperty(exports, "within", {
|
|
|
101
113
|
});
|
|
102
114
|
var _act = _interopRequireDefault(require("./act"));
|
|
103
115
|
var _cleanup = _interopRequireDefault(require("./cleanup"));
|
|
104
|
-
var _fireEvent =
|
|
116
|
+
var _fireEvent = _interopRequireWildcard(require("./fire-event"));
|
|
105
117
|
var _render = _interopRequireDefault(require("./render"));
|
|
118
|
+
var _renderAsync = _interopRequireDefault(require("./render-async"));
|
|
106
119
|
var _waitFor = _interopRequireDefault(require("./wait-for"));
|
|
107
120
|
var _waitForElementToBeRemoved = _interopRequireDefault(require("./wait-for-element-to-be-removed"));
|
|
108
121
|
var _within = require("./within");
|
|
@@ -112,5 +125,6 @@ var _matches = require("./matches");
|
|
|
112
125
|
var _renderHook = require("./render-hook");
|
|
113
126
|
var _screen = require("./screen");
|
|
114
127
|
var _userEvent = require("./user-event");
|
|
128
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
115
129
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
116
130
|
//# sourceMappingURL=pure.js.map
|
package/build/pure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pure.js","names":["_act","_interopRequireDefault","require","_cleanup","_fireEvent","_render","_waitFor","_waitForElementToBeRemoved","_within","_config","_accessibility","_matches","_renderHook","_screen","_userEvent","e","__esModule","default"],"sources":["../src/pure.ts"],"sourcesContent":["export { default as act } from './act';\nexport { default as cleanup } from './cleanup';\nexport { default as fireEvent } from './fire-event';\nexport { default as render } from './render';\nexport { default as waitFor } from './wait-for';\nexport { default as waitForElementToBeRemoved } from './wait-for-element-to-be-removed';\nexport { within, getQueriesForElement } from './within';\n\nexport { configure, resetToDefaults } from './config';\nexport { isHiddenFromAccessibility, isInaccessible } from './helpers/accessibility';\nexport { getDefaultNormalizer } from './matches';\nexport { renderHook } from './render-hook';\nexport { screen } from './screen';\nexport { userEvent } from './user-event';\n\nexport type {\n RenderOptions,\n RenderResult,\n RenderResult as RenderAPI,\n DebugFunction,\n} from './render';\nexport type { RenderHookOptions, RenderHookResult } from './render-hook';\nexport type { Config } from './config';\nexport type { UserEventConfig } from './user-event';\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"pure.js","names":["_act","_interopRequireDefault","require","_cleanup","_fireEvent","_interopRequireWildcard","_render","_renderAsync","_waitFor","_waitForElementToBeRemoved","_within","_config","_accessibility","_matches","_renderHook","_screen","_userEvent","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor"],"sources":["../src/pure.ts"],"sourcesContent":["export { default as act } from './act';\nexport { default as cleanup } from './cleanup';\nexport { default as fireEvent, fireEventAsync } from './fire-event';\nexport { default as render } from './render';\nexport { default as renderAsync } from './render-async';\nexport { default as waitFor } from './wait-for';\nexport { default as waitForElementToBeRemoved } from './wait-for-element-to-be-removed';\nexport { within, getQueriesForElement } from './within';\n\nexport { configure, resetToDefaults } from './config';\nexport { isHiddenFromAccessibility, isInaccessible } from './helpers/accessibility';\nexport { getDefaultNormalizer } from './matches';\nexport { renderHook } from './render-hook';\nexport { screen } from './screen';\nexport { userEvent } from './user-event';\n\nexport type {\n RenderOptions,\n RenderResult,\n RenderResult as RenderAPI,\n DebugFunction,\n} from './render';\nexport type { RenderAsyncOptions, RenderAsyncResult } from './render-async';\nexport type { RenderHookOptions, RenderHookResult } from './render-hook';\nexport type { Config } from './config';\nexport type { UserEventConfig } from './user-event';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,UAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,YAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,QAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,0BAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,OAAA,GAAAR,OAAA;AAEA,IAAAS,OAAA,GAAAT,OAAA;AACA,IAAAU,cAAA,GAAAV,OAAA;AACA,IAAAW,QAAA,GAAAX,OAAA;AACA,IAAAY,WAAA,GAAAZ,OAAA;AACA,IAAAa,OAAA,GAAAb,OAAA;AACA,IAAAc,UAAA,GAAAd,OAAA;AAAyC,SAAAG,wBAAAY,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAd,uBAAA,YAAAA,CAAAY,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAjB,uBAAAgB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAK,UAAA,GAAAL,CAAA,KAAAU,OAAA,EAAAV,CAAA","ignoreList":[]}
|
package/build/render-act.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { ReactTestRenderer, TestRendererOptions } from 'react-test-renderer';
|
|
2
2
|
export declare function renderWithAct(component: React.ReactElement, options?: Partial<TestRendererOptions>): ReactTestRenderer;
|
|
3
|
+
export declare function renderWithAsyncAct(component: React.ReactElement, options?: Partial<TestRendererOptions>): Promise<ReactTestRenderer>;
|
package/build/render-act.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.renderWithAct = renderWithAct;
|
|
7
|
+
exports.renderWithAsyncAct = renderWithAsyncAct;
|
|
7
8
|
var _reactTestRenderer = _interopRequireDefault(require("react-test-renderer"));
|
|
8
9
|
var _act = _interopRequireDefault(require("./act"));
|
|
9
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -19,4 +20,16 @@ function renderWithAct(component, options) {
|
|
|
19
20
|
// @ts-expect-error: `act` is synchronous, so `renderer` is already initialized here
|
|
20
21
|
return renderer;
|
|
21
22
|
}
|
|
23
|
+
async function renderWithAsyncAct(component, options) {
|
|
24
|
+
let renderer;
|
|
25
|
+
|
|
26
|
+
// eslint-disable-next-line require-await
|
|
27
|
+
await (0, _act.default)(async () => {
|
|
28
|
+
// @ts-expect-error `TestRenderer.create` is not typed correctly
|
|
29
|
+
renderer = _reactTestRenderer.default.create(component, options);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// @ts-expect-error: `renderer` is already initialized here
|
|
33
|
+
return renderer;
|
|
34
|
+
}
|
|
22
35
|
//# sourceMappingURL=render-act.js.map
|
package/build/render-act.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-act.js","names":["_reactTestRenderer","_interopRequireDefault","require","_act","e","__esModule","default","renderWithAct","component","options","renderer","act","TestRenderer","create"],"sources":["../src/render-act.ts"],"sourcesContent":["import type { ReactTestRenderer, TestRendererOptions } from 'react-test-renderer';\nimport TestRenderer from 'react-test-renderer';\n\nimport act from './act';\n\nexport function renderWithAct(\n component: React.ReactElement,\n options?: Partial<TestRendererOptions>,\n): ReactTestRenderer {\n let renderer: ReactTestRenderer;\n\n // This will be called synchronously.\n void act(() => {\n // @ts-expect-error `TestRenderer.create` is not typed correctly\n renderer = TestRenderer.create(component, options);\n });\n\n // @ts-expect-error: `act` is synchronous, so `renderer` is already initialized here\n return renderer;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"render-act.js","names":["_reactTestRenderer","_interopRequireDefault","require","_act","e","__esModule","default","renderWithAct","component","options","renderer","act","TestRenderer","create","renderWithAsyncAct"],"sources":["../src/render-act.ts"],"sourcesContent":["import type { ReactTestRenderer, TestRendererOptions } from 'react-test-renderer';\nimport TestRenderer from 'react-test-renderer';\n\nimport act from './act';\n\nexport function renderWithAct(\n component: React.ReactElement,\n options?: Partial<TestRendererOptions>,\n): ReactTestRenderer {\n let renderer: ReactTestRenderer;\n\n // This will be called synchronously.\n void act(() => {\n // @ts-expect-error `TestRenderer.create` is not typed correctly\n renderer = TestRenderer.create(component, options);\n });\n\n // @ts-expect-error: `act` is synchronous, so `renderer` is already initialized here\n return renderer;\n}\n\nexport async function renderWithAsyncAct(\n component: React.ReactElement,\n options?: Partial<TestRendererOptions>,\n): Promise<ReactTestRenderer> {\n let renderer: ReactTestRenderer;\n\n // eslint-disable-next-line require-await\n await act(async () => {\n // @ts-expect-error `TestRenderer.create` is not typed correctly\n renderer = TestRenderer.create(component, options);\n });\n\n // @ts-expect-error: `renderer` is already initialized here\n return renderer;\n}\n"],"mappings":";;;;;;;AACA,IAAAA,kBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,IAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAwB,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEjB,SAASG,aAAaA,CAC3BC,SAA6B,EAC7BC,OAAsC,EACnB;EACnB,IAAIC,QAA2B;;EAE/B;EACA,KAAK,IAAAC,YAAG,EAAC,MAAM;IACb;IACAD,QAAQ,GAAGE,0BAAY,CAACC,MAAM,CAACL,SAAS,EAAEC,OAAO,CAAC;EACpD,CAAC,CAAC;;EAEF;EACA,OAAOC,QAAQ;AACjB;AAEO,eAAeI,kBAAkBA,CACtCN,SAA6B,EAC7BC,OAAsC,EACV;EAC5B,IAAIC,QAA2B;;EAE/B;EACA,MAAM,IAAAC,YAAG,EAAC,YAAY;IACpB;IACAD,QAAQ,GAAGE,0BAAY,CAACC,MAAM,CAACL,SAAS,EAAEC,OAAO,CAAC;EACpD,CAAC,CAAC;;EAEF;EACA,OAAOC,QAAQ;AACjB","ignoreList":[]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { ReactTestInstance } from 'react-test-renderer';
|
|
3
|
+
import type { DebugOptions } from './helpers/debug';
|
|
4
|
+
export interface RenderAsyncOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Pass a React Component as the wrapper option to have it rendered around the inner element. This is most useful for creating
|
|
7
|
+
* reusable custom render functions for common data providers.
|
|
8
|
+
*/
|
|
9
|
+
wrapper?: React.ComponentType<any>;
|
|
10
|
+
/**
|
|
11
|
+
* Set to `false` to disable concurrent rendering.
|
|
12
|
+
* Otherwise `render` will default to concurrent rendering.
|
|
13
|
+
*/
|
|
14
|
+
concurrentRoot?: boolean;
|
|
15
|
+
createNodeMock?: (element: React.ReactElement) => unknown;
|
|
16
|
+
}
|
|
17
|
+
export type RenderAsyncResult = ReturnType<typeof renderAsync>;
|
|
18
|
+
/**
|
|
19
|
+
* Renders test component deeply using React Test Renderer and exposes helpers
|
|
20
|
+
* to assert on the output.
|
|
21
|
+
*/
|
|
22
|
+
export default function renderAsync<T>(component: React.ReactElement<T>, options?: RenderAsyncOptions): Promise<{
|
|
23
|
+
rerender: (_component: React.ReactElement) => never;
|
|
24
|
+
rerenderAsync: (component: React.ReactElement) => Promise<void>;
|
|
25
|
+
update: (_component: React.ReactElement) => never;
|
|
26
|
+
updateAsync: (component: React.ReactElement) => Promise<void>;
|
|
27
|
+
unmount: () => never;
|
|
28
|
+
unmountAsync: () => Promise<void>;
|
|
29
|
+
toJSON: () => null | import("react-test-renderer").ReactTestRendererJSON | import("react-test-renderer").ReactTestRendererJSON[];
|
|
30
|
+
debug: DebugFunction;
|
|
31
|
+
root: ReactTestInstance;
|
|
32
|
+
UNSAFE_root: ReactTestInstance;
|
|
33
|
+
UNSAFE_getByProps: (props: {
|
|
34
|
+
[x: string]: unknown;
|
|
35
|
+
}) => ReactTestInstance;
|
|
36
|
+
UNSAFE_getAllByProps: (props: {
|
|
37
|
+
[x: string]: unknown;
|
|
38
|
+
}) => Array<ReactTestInstance>;
|
|
39
|
+
UNSAFE_queryByProps: (props: {
|
|
40
|
+
[x: string]: unknown;
|
|
41
|
+
}) => ReactTestInstance | null;
|
|
42
|
+
UNSAFE_queryAllByProps: (props: {
|
|
43
|
+
[x: string]: unknown;
|
|
44
|
+
}) => Array<ReactTestInstance>;
|
|
45
|
+
UNSAFE_getByType: <P>(type: React.ComponentType<P>) => ReactTestInstance;
|
|
46
|
+
UNSAFE_getAllByType: <P>(type: React.ComponentType<P>) => Array<ReactTestInstance>;
|
|
47
|
+
UNSAFE_queryByType: <P>(type: React.ComponentType<P>) => ReactTestInstance | null;
|
|
48
|
+
UNSAFE_queryAllByType: <P>(type: React.ComponentType<P>) => Array<ReactTestInstance>;
|
|
49
|
+
getByRole: import("./queries/make-queries").GetByQuery<import("./queries/role").ByRoleMatcher, import("./queries/role").ByRoleOptions>;
|
|
50
|
+
getAllByRole: import("./queries/make-queries").GetAllByQuery<import("./queries/role").ByRoleMatcher, import("./queries/role").ByRoleOptions>;
|
|
51
|
+
queryByRole: import("./queries/make-queries").QueryByQuery<import("./queries/role").ByRoleMatcher, import("./queries/role").ByRoleOptions>;
|
|
52
|
+
queryAllByRole: import("./queries/make-queries").QueryAllByQuery<import("./queries/role").ByRoleMatcher, import("./queries/role").ByRoleOptions>;
|
|
53
|
+
findByRole: import("./queries/make-queries").FindByQuery<import("./queries/role").ByRoleMatcher, import("./queries/role").ByRoleOptions>;
|
|
54
|
+
findAllByRole: import("./queries/make-queries").FindAllByQuery<import("./queries/role").ByRoleMatcher, import("./queries/role").ByRoleOptions>;
|
|
55
|
+
getByHintText: import("./queries/make-queries").GetByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
56
|
+
getAllByHintText: import("./queries/make-queries").GetAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
57
|
+
queryByHintText: import("./queries/make-queries").QueryByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
58
|
+
queryAllByHintText: import("./queries/make-queries").QueryAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
59
|
+
findByHintText: import("./queries/make-queries").FindByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
60
|
+
findAllByHintText: import("./queries/make-queries").FindAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
61
|
+
getByA11yHint: import("./queries/make-queries").GetByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
62
|
+
getAllByA11yHint: import("./queries/make-queries").GetAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
63
|
+
queryByA11yHint: import("./queries/make-queries").QueryByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
64
|
+
queryAllByA11yHint: import("./queries/make-queries").QueryAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
65
|
+
findByA11yHint: import("./queries/make-queries").FindByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
66
|
+
findAllByA11yHint: import("./queries/make-queries").FindAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
67
|
+
getByAccessibilityHint: import("./queries/make-queries").GetByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
68
|
+
getAllByAccessibilityHint: import("./queries/make-queries").GetAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
69
|
+
queryByAccessibilityHint: import("./queries/make-queries").QueryByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
70
|
+
queryAllByAccessibilityHint: import("./queries/make-queries").QueryAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
71
|
+
findByAccessibilityHint: import("./queries/make-queries").FindByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
72
|
+
findAllByAccessibilityHint: import("./queries/make-queries").FindAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
73
|
+
getByLabelText: import("./queries/make-queries").GetByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
74
|
+
getAllByLabelText: import("./queries/make-queries").GetAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
75
|
+
queryByLabelText: import("./queries/make-queries").QueryByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
76
|
+
queryAllByLabelText: import("./queries/make-queries").QueryAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
77
|
+
findByLabelText: import("./queries/make-queries").FindByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
78
|
+
findAllByLabelText: import("./queries/make-queries").FindAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
79
|
+
getByPlaceholderText: import("./queries/make-queries").GetByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
80
|
+
getAllByPlaceholderText: import("./queries/make-queries").GetAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
81
|
+
queryByPlaceholderText: import("./queries/make-queries").QueryByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
82
|
+
queryAllByPlaceholderText: import("./queries/make-queries").QueryAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
83
|
+
findByPlaceholderText: import("./queries/make-queries").FindByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
84
|
+
findAllByPlaceholderText: import("./queries/make-queries").FindAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
85
|
+
getByDisplayValue: import("./queries/make-queries").GetByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
86
|
+
getAllByDisplayValue: import("./queries/make-queries").GetAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
87
|
+
queryByDisplayValue: import("./queries/make-queries").QueryByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
88
|
+
queryAllByDisplayValue: import("./queries/make-queries").QueryAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
89
|
+
findByDisplayValue: import("./queries/make-queries").FindByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
90
|
+
findAllByDisplayValue: import("./queries/make-queries").FindAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
91
|
+
getByTestId: import("./queries/make-queries").GetByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
92
|
+
getAllByTestId: import("./queries/make-queries").GetAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
93
|
+
queryByTestId: import("./queries/make-queries").QueryByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
94
|
+
queryAllByTestId: import("./queries/make-queries").QueryAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
95
|
+
findByTestId: import("./queries/make-queries").FindByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
96
|
+
findAllByTestId: import("./queries/make-queries").FindAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
97
|
+
getByText: import("./queries/make-queries").GetByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
98
|
+
getAllByText: import("./queries/make-queries").GetAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
99
|
+
queryByText: import("./queries/make-queries").QueryByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
100
|
+
queryAllByText: import("./queries/make-queries").QueryAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
101
|
+
findByText: import("./queries/make-queries").FindByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
102
|
+
findAllByText: import("./queries/make-queries").FindAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
103
|
+
}>;
|
|
104
|
+
export type DebugFunction = (options?: DebugOptions) => void;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = renderAsync;
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _act = _interopRequireDefault(require("./act"));
|
|
9
|
+
var _cleanup = require("./cleanup");
|
|
10
|
+
var _config = require("./config");
|
|
11
|
+
var _componentTree = require("./helpers/component-tree");
|
|
12
|
+
var _debug = require("./helpers/debug");
|
|
13
|
+
var _errors = require("./helpers/errors");
|
|
14
|
+
var _renderAct = require("./render-act");
|
|
15
|
+
var _screen = require("./screen");
|
|
16
|
+
var _within = require("./within");
|
|
17
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
19
|
+
/**
|
|
20
|
+
* Renders test component deeply using React Test Renderer and exposes helpers
|
|
21
|
+
* to assert on the output.
|
|
22
|
+
*/
|
|
23
|
+
async function renderAsync(component, options = {}) {
|
|
24
|
+
const {
|
|
25
|
+
wrapper: Wrapper,
|
|
26
|
+
concurrentRoot,
|
|
27
|
+
...rest
|
|
28
|
+
} = options || {};
|
|
29
|
+
const testRendererOptions = {
|
|
30
|
+
...rest,
|
|
31
|
+
// @ts-expect-error incomplete typing on RTR package
|
|
32
|
+
unstable_isConcurrent: concurrentRoot ?? (0, _config.getConfig)().concurrentRoot
|
|
33
|
+
};
|
|
34
|
+
const wrap = element => Wrapper ? /*#__PURE__*/React.createElement(Wrapper, null, element) : element;
|
|
35
|
+
const renderer = await (0, _renderAct.renderWithAsyncAct)(wrap(component), testRendererOptions);
|
|
36
|
+
return buildRenderResult(renderer, wrap);
|
|
37
|
+
}
|
|
38
|
+
function buildRenderResult(renderer, wrap) {
|
|
39
|
+
const instance = renderer.root;
|
|
40
|
+
const rerender = _component => {
|
|
41
|
+
throw new _errors.ErrorWithStack('"rerender(...)" is not supported when using "renderAsync" use "await rerenderAsync(...)" instead', rerender);
|
|
42
|
+
};
|
|
43
|
+
const rerenderAsync = async component => {
|
|
44
|
+
// eslint-disable-next-line require-await
|
|
45
|
+
await (0, _act.default)(async () => {
|
|
46
|
+
renderer.update(wrap(component));
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
const unmount = () => {
|
|
50
|
+
throw new _errors.ErrorWithStack('"unmount()" is not supported when using "renderAsync" use "await unmountAsync()" instead', unmount);
|
|
51
|
+
};
|
|
52
|
+
const unmountAsync = async () => {
|
|
53
|
+
// eslint-disable-next-line require-await
|
|
54
|
+
await (0, _act.default)(async () => {
|
|
55
|
+
renderer.unmount();
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
(0, _cleanup.addToCleanupQueue)(unmountAsync);
|
|
59
|
+
const result = {
|
|
60
|
+
...(0, _within.getQueriesForElement)(instance),
|
|
61
|
+
rerender,
|
|
62
|
+
rerenderAsync,
|
|
63
|
+
update: rerender,
|
|
64
|
+
// alias for `rerender`
|
|
65
|
+
updateAsync: rerenderAsync,
|
|
66
|
+
// alias for `rerenderAsync`
|
|
67
|
+
unmount,
|
|
68
|
+
unmountAsync,
|
|
69
|
+
toJSON: renderer.toJSON,
|
|
70
|
+
debug: makeDebug(renderer),
|
|
71
|
+
get root() {
|
|
72
|
+
return (0, _componentTree.getHostSelves)(instance)[0];
|
|
73
|
+
},
|
|
74
|
+
UNSAFE_root: instance
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// Add as non-enumerable property, so that it's safe to enumerate
|
|
78
|
+
// `render` result, e.g. using destructuring rest syntax.
|
|
79
|
+
Object.defineProperty(result, 'container', {
|
|
80
|
+
enumerable: false,
|
|
81
|
+
get() {
|
|
82
|
+
throw new Error("'container' property has been renamed to 'UNSAFE_root'.\n\n" + "Consider using 'root' property which returns root host element.");
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
(0, _screen.setRenderResult)(result);
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
function makeDebug(renderer) {
|
|
89
|
+
function debugImpl(options) {
|
|
90
|
+
const {
|
|
91
|
+
defaultDebugOptions
|
|
92
|
+
} = (0, _config.getConfig)();
|
|
93
|
+
const debugOptions = {
|
|
94
|
+
...defaultDebugOptions,
|
|
95
|
+
...options
|
|
96
|
+
};
|
|
97
|
+
const json = renderer.toJSON();
|
|
98
|
+
if (json) {
|
|
99
|
+
return (0, _debug.debug)(json, debugOptions);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return debugImpl;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=render-async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-async.js","names":["React","_interopRequireWildcard","require","_act","_interopRequireDefault","_cleanup","_config","_componentTree","_debug","_errors","_renderAct","_screen","_within","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","renderAsync","component","options","wrapper","Wrapper","concurrentRoot","rest","testRendererOptions","unstable_isConcurrent","getConfig","wrap","element","createElement","renderer","renderWithAsyncAct","buildRenderResult","instance","root","rerender","_component","ErrorWithStack","rerenderAsync","act","update","unmount","unmountAsync","addToCleanupQueue","result","getQueriesForElement","updateAsync","toJSON","debug","makeDebug","getHostSelves","UNSAFE_root","enumerable","Error","setRenderResult","debugImpl","defaultDebugOptions","debugOptions","json"],"sources":["../src/render-async.tsx"],"sourcesContent":["import * as React from 'react';\nimport type {\n ReactTestInstance,\n ReactTestRenderer,\n TestRendererOptions,\n} from 'react-test-renderer';\n\nimport act from './act';\nimport { addToCleanupQueue } from './cleanup';\nimport { getConfig } from './config';\nimport { getHostSelves } from './helpers/component-tree';\nimport type { DebugOptions } from './helpers/debug';\nimport { debug } from './helpers/debug';\nimport { ErrorWithStack } from './helpers/errors';\nimport { renderWithAsyncAct } from './render-act';\nimport { setRenderResult } from './screen';\nimport { getQueriesForElement } from './within';\n\nexport interface RenderAsyncOptions {\n /**\n * Pass a React Component as the wrapper option to have it rendered around the inner element. This is most useful for creating\n * reusable custom render functions for common data providers.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper?: React.ComponentType<any>;\n\n /**\n * Set to `false` to disable concurrent rendering.\n * Otherwise `render` will default to concurrent rendering.\n */\n // TODO: should we assume concurrentRoot is true for react suspense?\n concurrentRoot?: boolean;\n\n createNodeMock?: (element: React.ReactElement) => unknown;\n}\n\nexport type RenderAsyncResult = ReturnType<typeof renderAsync>;\n\n/**\n * Renders test component deeply using React Test Renderer and exposes helpers\n * to assert on the output.\n */\nexport default async function renderAsync<T>(\n component: React.ReactElement<T>,\n options: RenderAsyncOptions = {},\n) {\n const { wrapper: Wrapper, concurrentRoot, ...rest } = options || {};\n\n const testRendererOptions: TestRendererOptions = {\n ...rest,\n // @ts-expect-error incomplete typing on RTR package\n unstable_isConcurrent: concurrentRoot ?? getConfig().concurrentRoot,\n };\n\n const wrap = (element: React.ReactElement) => (Wrapper ? <Wrapper>{element}</Wrapper> : element);\n const renderer = await renderWithAsyncAct(wrap(component), testRendererOptions);\n return buildRenderResult(renderer, wrap);\n}\n\nfunction buildRenderResult(\n renderer: ReactTestRenderer,\n wrap: (element: React.ReactElement) => React.JSX.Element,\n) {\n const instance = renderer.root;\n\n const rerender = (_component: React.ReactElement) => {\n throw new ErrorWithStack(\n '\"rerender(...)\" is not supported when using \"renderAsync\" use \"await rerenderAsync(...)\" instead',\n rerender,\n );\n };\n const rerenderAsync = async (component: React.ReactElement) => {\n // eslint-disable-next-line require-await\n await act(async () => {\n renderer.update(wrap(component));\n });\n };\n\n const unmount = () => {\n throw new ErrorWithStack(\n '\"unmount()\" is not supported when using \"renderAsync\" use \"await unmountAsync()\" instead',\n unmount,\n );\n };\n const unmountAsync = async () => {\n // eslint-disable-next-line require-await\n await act(async () => {\n renderer.unmount();\n });\n };\n\n addToCleanupQueue(unmountAsync);\n\n const result = {\n ...getQueriesForElement(instance),\n rerender,\n rerenderAsync,\n update: rerender, // alias for `rerender`\n updateAsync: rerenderAsync, // alias for `rerenderAsync`\n unmount,\n unmountAsync,\n toJSON: renderer.toJSON,\n debug: makeDebug(renderer),\n get root(): ReactTestInstance {\n return getHostSelves(instance)[0];\n },\n UNSAFE_root: instance,\n };\n\n // Add as non-enumerable property, so that it's safe to enumerate\n // `render` result, e.g. using destructuring rest syntax.\n Object.defineProperty(result, 'container', {\n enumerable: false,\n get() {\n throw new Error(\n \"'container' property has been renamed to 'UNSAFE_root'.\\n\\n\" +\n \"Consider using 'root' property which returns root host element.\",\n );\n },\n });\n\n setRenderResult(result);\n\n return result;\n}\n\nexport type DebugFunction = (options?: DebugOptions) => void;\n\nfunction makeDebug(renderer: ReactTestRenderer): DebugFunction {\n function debugImpl(options?: DebugOptions) {\n const { defaultDebugOptions } = getConfig();\n const debugOptions = { ...defaultDebugOptions, ...options };\n const json = renderer.toJSON();\n if (json) {\n return debug(json, debugOptions);\n }\n }\n return debugImpl;\n}\n"],"mappings":"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","ignoreList":[]}
|
package/build/render.d.ts
CHANGED
|
@@ -21,9 +21,12 @@ export type RenderResult = ReturnType<typeof render>;
|
|
|
21
21
|
* to assert on the output.
|
|
22
22
|
*/
|
|
23
23
|
export default function render<T>(component: React.ReactElement<T>, options?: RenderOptions): {
|
|
24
|
+
rerender: (component: React.ReactElement) => void;
|
|
25
|
+
rerenderAsync: (component: React.ReactElement) => Promise<void>;
|
|
24
26
|
update: (component: React.ReactElement) => void;
|
|
27
|
+
updateAsync: (component: React.ReactElement) => Promise<void>;
|
|
25
28
|
unmount: () => void;
|
|
26
|
-
|
|
29
|
+
unmountAsync: () => Promise<void>;
|
|
27
30
|
toJSON: () => null | import("react-test-renderer").ReactTestRendererJSON | import("react-test-renderer").ReactTestRendererJSON[];
|
|
28
31
|
debug: DebugFunction;
|
|
29
32
|
root: ReactTestInstance;
|
|
@@ -100,9 +103,12 @@ export default function render<T>(component: React.ReactElement<T>, options?: Re
|
|
|
100
103
|
findAllByText: import("./queries/make-queries").FindAllByQuery<import("./matches").TextMatch, import("./queries/options").CommonQueryOptions & import("./matches").TextMatchOptions>;
|
|
101
104
|
};
|
|
102
105
|
export declare function renderInternal<T>(component: React.ReactElement<T>, options?: RenderOptions): {
|
|
106
|
+
rerender: (component: React.ReactElement) => void;
|
|
107
|
+
rerenderAsync: (component: React.ReactElement) => Promise<void>;
|
|
103
108
|
update: (component: React.ReactElement) => void;
|
|
109
|
+
updateAsync: (component: React.ReactElement) => Promise<void>;
|
|
104
110
|
unmount: () => void;
|
|
105
|
-
|
|
111
|
+
unmountAsync: () => Promise<void>;
|
|
106
112
|
toJSON: () => null | import("react-test-renderer").ReactTestRendererJSON | import("react-test-renderer").ReactTestRendererJSON[];
|
|
107
113
|
debug: DebugFunction;
|
|
108
114
|
root: ReactTestInstance;
|
package/build/render.js
CHANGED
|
@@ -65,20 +65,40 @@ function renderWithStringValidation(component, options = {}) {
|
|
|
65
65
|
return buildRenderResult(renderer, wrap);
|
|
66
66
|
}
|
|
67
67
|
function buildRenderResult(renderer, wrap) {
|
|
68
|
-
const update = updateWithAct(renderer, wrap);
|
|
69
68
|
const instance = renderer.root;
|
|
69
|
+
const rerender = component => {
|
|
70
|
+
void (0, _act.default)(() => {
|
|
71
|
+
renderer.update(wrap(component));
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
const rerenderAsync = async component => {
|
|
75
|
+
// eslint-disable-next-line require-await
|
|
76
|
+
await (0, _act.default)(async () => {
|
|
77
|
+
renderer.update(wrap(component));
|
|
78
|
+
});
|
|
79
|
+
};
|
|
70
80
|
const unmount = () => {
|
|
71
81
|
void (0, _act.default)(() => {
|
|
72
82
|
renderer.unmount();
|
|
73
83
|
});
|
|
74
84
|
};
|
|
85
|
+
const unmountAsync = async () => {
|
|
86
|
+
// eslint-disable-next-line require-await
|
|
87
|
+
await (0, _act.default)(async () => {
|
|
88
|
+
renderer.unmount();
|
|
89
|
+
});
|
|
90
|
+
};
|
|
75
91
|
(0, _cleanup.addToCleanupQueue)(unmount);
|
|
76
92
|
const result = {
|
|
77
93
|
...(0, _within.getQueriesForElement)(instance),
|
|
78
|
-
|
|
94
|
+
rerender,
|
|
95
|
+
rerenderAsync,
|
|
96
|
+
update: rerender,
|
|
97
|
+
// alias for 'rerender'
|
|
98
|
+
updateAsync: rerenderAsync,
|
|
99
|
+
// alias for `rerenderAsync`
|
|
79
100
|
unmount,
|
|
80
|
-
|
|
81
|
-
// alias for `update`
|
|
101
|
+
unmountAsync,
|
|
82
102
|
toJSON: renderer.toJSON,
|
|
83
103
|
debug: makeDebug(renderer),
|
|
84
104
|
get root() {
|
|
@@ -98,13 +118,6 @@ function buildRenderResult(renderer, wrap) {
|
|
|
98
118
|
(0, _screen.setRenderResult)(result);
|
|
99
119
|
return result;
|
|
100
120
|
}
|
|
101
|
-
function updateWithAct(renderer, wrap) {
|
|
102
|
-
return function (component) {
|
|
103
|
-
void (0, _act.default)(() => {
|
|
104
|
-
renderer.update(wrap(component));
|
|
105
|
-
});
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
121
|
function makeDebug(renderer) {
|
|
109
122
|
function debugImpl(options) {
|
|
110
123
|
const {
|
package/build/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","names":["React","_interopRequireWildcard","require","_act","_interopRequireDefault","_cleanup","_config","_componentTree","_debug","_stringValidation","_renderAct","_screen","_within","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","render","component","options","renderInternal","wrapper","Wrapper","concurrentRoot","unstable_validateStringsRenderedWithinText","rest","testRendererOptions","unstable_isConcurrent","getConfig","renderWithStringValidation","wrap","element","createElement","renderer","renderWithAct","buildRenderResult","Profiler","id","onRender","handleRender","_","phase","validateStringsRenderedWithinText","toJSON","update","updateWithAct","instance","root","unmount","act","addToCleanupQueue","result","getQueriesForElement","rerender","debug","makeDebug","getHostSelves","UNSAFE_root","enumerable","Error","setRenderResult","debugImpl","defaultDebugOptions","debugOptions","json"],"sources":["../src/render.tsx"],"sourcesContent":["import * as React from 'react';\nimport type {\n ReactTestInstance,\n ReactTestRenderer,\n TestRendererOptions,\n} from 'react-test-renderer';\n\nimport act from './act';\nimport { addToCleanupQueue } from './cleanup';\nimport { getConfig } from './config';\nimport { getHostSelves } from './helpers/component-tree';\nimport type { DebugOptions } from './helpers/debug';\nimport { debug } from './helpers/debug';\nimport { validateStringsRenderedWithinText } from './helpers/string-validation';\nimport { renderWithAct } from './render-act';\nimport { setRenderResult } from './screen';\nimport { getQueriesForElement } from './within';\n\nexport interface RenderOptions {\n /**\n * Pass a React Component as the wrapper option to have it rendered around the inner element. This is most useful for creating\n * reusable custom render functions for common data providers.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper?: React.ComponentType<any>;\n\n /**\n * Set to `false` to disable concurrent rendering.\n * Otherwise `render` will default to concurrent rendering.\n */\n concurrentRoot?: boolean;\n\n createNodeMock?: (element: React.ReactElement) => unknown;\n unstable_validateStringsRenderedWithinText?: boolean;\n}\n\nexport type RenderResult = ReturnType<typeof render>;\n\n/**\n * Renders test component deeply using React Test Renderer and exposes helpers\n * to assert on the output.\n */\nexport default function render<T>(component: React.ReactElement<T>, options: RenderOptions = {}) {\n return renderInternal(component, options);\n}\n\nexport function renderInternal<T>(component: React.ReactElement<T>, options?: RenderOptions) {\n const {\n wrapper: Wrapper,\n concurrentRoot,\n unstable_validateStringsRenderedWithinText,\n ...rest\n } = options || {};\n\n const testRendererOptions: TestRendererOptions = {\n ...rest,\n // @ts-expect-error incomplete typing on RTR package\n unstable_isConcurrent: concurrentRoot ?? getConfig().concurrentRoot,\n };\n\n if (unstable_validateStringsRenderedWithinText) {\n return renderWithStringValidation(component, {\n wrapper: Wrapper,\n ...testRendererOptions,\n });\n }\n\n const wrap = (element: React.ReactElement) => (Wrapper ? <Wrapper>{element}</Wrapper> : element);\n const renderer = renderWithAct(wrap(component), testRendererOptions);\n return buildRenderResult(renderer, wrap);\n}\n\nfunction renderWithStringValidation<T>(\n component: React.ReactElement<T>,\n options: Omit<RenderOptions, 'unstable_validateStringsRenderedWithinText'> = {},\n) {\n const { wrapper: Wrapper, ...testRendererOptions } = options ?? {};\n\n const wrap = (element: React.ReactElement) => (\n <React.Profiler id=\"renderProfiler\" onRender={handleRender}>\n {Wrapper ? <Wrapper>{element}</Wrapper> : element}\n </React.Profiler>\n );\n\n const handleRender: React.ProfilerOnRenderCallback = (_, phase) => {\n if (renderer && phase === 'update') {\n validateStringsRenderedWithinText(renderer.toJSON());\n }\n };\n\n const renderer: ReactTestRenderer = renderWithAct(wrap(component), testRendererOptions);\n validateStringsRenderedWithinText(renderer.toJSON());\n\n return buildRenderResult(renderer, wrap);\n}\n\nfunction buildRenderResult(\n renderer: ReactTestRenderer,\n wrap: (element: React.ReactElement) => React.JSX.Element,\n) {\n const update = updateWithAct(renderer, wrap);\n const instance = renderer.root;\n\n const unmount = () => {\n void act(() => {\n renderer.unmount();\n });\n };\n\n addToCleanupQueue(unmount);\n\n const result = {\n ...getQueriesForElement(instance),\n update,\n unmount,\n rerender: update, // alias for `update`\n toJSON: renderer.toJSON,\n debug: makeDebug(renderer),\n get root(): ReactTestInstance {\n return getHostSelves(instance)[0];\n },\n UNSAFE_root: instance,\n };\n\n // Add as non-enumerable property, so that it's safe to enumerate\n // `render` result, e.g. using destructuring rest syntax.\n Object.defineProperty(result, 'container', {\n enumerable: false,\n get() {\n throw new Error(\n \"'container' property has been renamed to 'UNSAFE_root'.\\n\\n\" +\n \"Consider using 'root' property which returns root host element.\",\n );\n },\n });\n\n setRenderResult(result);\n\n return result;\n}\n\nfunction updateWithAct(\n renderer: ReactTestRenderer,\n wrap: (innerElement: React.ReactElement) => React.ReactElement,\n) {\n return function (component: React.ReactElement) {\n void act(() => {\n renderer.update(wrap(component));\n });\n };\n}\n\nexport type DebugFunction = (options?: DebugOptions) => void;\n\nfunction makeDebug(renderer: ReactTestRenderer): DebugFunction {\n function debugImpl(options?: DebugOptions) {\n const { defaultDebugOptions } = getConfig();\n const debugOptions = { ...defaultDebugOptions, ...options };\n const json = renderer.toJSON();\n if (json) {\n return debug(json, debugOptions);\n }\n }\n return debugImpl;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"render.js","names":["React","_interopRequireWildcard","require","_act","_interopRequireDefault","_cleanup","_config","_componentTree","_debug","_stringValidation","_renderAct","_screen","_within","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","render","component","options","renderInternal","wrapper","Wrapper","concurrentRoot","unstable_validateStringsRenderedWithinText","rest","testRendererOptions","unstable_isConcurrent","getConfig","renderWithStringValidation","wrap","element","createElement","renderer","renderWithAct","buildRenderResult","Profiler","id","onRender","handleRender","_","phase","validateStringsRenderedWithinText","toJSON","instance","root","rerender","act","update","rerenderAsync","unmount","unmountAsync","addToCleanupQueue","result","getQueriesForElement","updateAsync","debug","makeDebug","getHostSelves","UNSAFE_root","enumerable","Error","setRenderResult","debugImpl","defaultDebugOptions","debugOptions","json"],"sources":["../src/render.tsx"],"sourcesContent":["import * as React from 'react';\nimport type {\n ReactTestInstance,\n ReactTestRenderer,\n TestRendererOptions,\n} from 'react-test-renderer';\n\nimport act from './act';\nimport { addToCleanupQueue } from './cleanup';\nimport { getConfig } from './config';\nimport { getHostSelves } from './helpers/component-tree';\nimport type { DebugOptions } from './helpers/debug';\nimport { debug } from './helpers/debug';\nimport { validateStringsRenderedWithinText } from './helpers/string-validation';\nimport { renderWithAct } from './render-act';\nimport { setRenderResult } from './screen';\nimport { getQueriesForElement } from './within';\n\nexport interface RenderOptions {\n /**\n * Pass a React Component as the wrapper option to have it rendered around the inner element. This is most useful for creating\n * reusable custom render functions for common data providers.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper?: React.ComponentType<any>;\n\n /**\n * Set to `false` to disable concurrent rendering.\n * Otherwise `render` will default to concurrent rendering.\n */\n concurrentRoot?: boolean;\n\n createNodeMock?: (element: React.ReactElement) => unknown;\n unstable_validateStringsRenderedWithinText?: boolean;\n}\n\nexport type RenderResult = ReturnType<typeof render>;\n\n/**\n * Renders test component deeply using React Test Renderer and exposes helpers\n * to assert on the output.\n */\nexport default function render<T>(component: React.ReactElement<T>, options: RenderOptions = {}) {\n return renderInternal(component, options);\n}\n\nexport function renderInternal<T>(component: React.ReactElement<T>, options?: RenderOptions) {\n const {\n wrapper: Wrapper,\n concurrentRoot,\n unstable_validateStringsRenderedWithinText,\n ...rest\n } = options || {};\n\n const testRendererOptions: TestRendererOptions = {\n ...rest,\n // @ts-expect-error incomplete typing on RTR package\n unstable_isConcurrent: concurrentRoot ?? getConfig().concurrentRoot,\n };\n\n if (unstable_validateStringsRenderedWithinText) {\n return renderWithStringValidation(component, {\n wrapper: Wrapper,\n ...testRendererOptions,\n });\n }\n\n const wrap = (element: React.ReactElement) => (Wrapper ? <Wrapper>{element}</Wrapper> : element);\n const renderer = renderWithAct(wrap(component), testRendererOptions);\n return buildRenderResult(renderer, wrap);\n}\n\nfunction renderWithStringValidation<T>(\n component: React.ReactElement<T>,\n options: Omit<RenderOptions, 'unstable_validateStringsRenderedWithinText'> = {},\n) {\n const { wrapper: Wrapper, ...testRendererOptions } = options ?? {};\n\n const wrap = (element: React.ReactElement) => (\n <React.Profiler id=\"renderProfiler\" onRender={handleRender}>\n {Wrapper ? <Wrapper>{element}</Wrapper> : element}\n </React.Profiler>\n );\n\n const handleRender: React.ProfilerOnRenderCallback = (_, phase) => {\n if (renderer && phase === 'update') {\n validateStringsRenderedWithinText(renderer.toJSON());\n }\n };\n\n const renderer: ReactTestRenderer = renderWithAct(wrap(component), testRendererOptions);\n validateStringsRenderedWithinText(renderer.toJSON());\n\n return buildRenderResult(renderer, wrap);\n}\n\nfunction buildRenderResult(\n renderer: ReactTestRenderer,\n wrap: (element: React.ReactElement) => React.JSX.Element,\n) {\n const instance = renderer.root;\n\n const rerender = (component: React.ReactElement) => {\n void act(() => {\n renderer.update(wrap(component));\n });\n };\n const rerenderAsync = async (component: React.ReactElement) => {\n // eslint-disable-next-line require-await\n await act(async () => {\n renderer.update(wrap(component));\n });\n };\n\n const unmount = () => {\n void act(() => {\n renderer.unmount();\n });\n };\n const unmountAsync = async () => {\n // eslint-disable-next-line require-await\n await act(async () => {\n renderer.unmount();\n });\n };\n\n addToCleanupQueue(unmount);\n\n const result = {\n ...getQueriesForElement(instance),\n rerender,\n rerenderAsync,\n update: rerender, // alias for 'rerender'\n updateAsync: rerenderAsync, // alias for `rerenderAsync`\n unmount,\n unmountAsync,\n toJSON: renderer.toJSON,\n debug: makeDebug(renderer),\n get root(): ReactTestInstance {\n return getHostSelves(instance)[0];\n },\n UNSAFE_root: instance,\n };\n\n // Add as non-enumerable property, so that it's safe to enumerate\n // `render` result, e.g. using destructuring rest syntax.\n Object.defineProperty(result, 'container', {\n enumerable: false,\n get() {\n throw new Error(\n \"'container' property has been renamed to 'UNSAFE_root'.\\n\\n\" +\n \"Consider using 'root' property which returns root host element.\",\n );\n },\n });\n\n setRenderResult(result);\n\n return result;\n}\n\nexport type DebugFunction = (options?: DebugOptions) => void;\n\nfunction makeDebug(renderer: ReactTestRenderer): DebugFunction {\n function debugImpl(options?: DebugOptions) {\n const { defaultDebugOptions } = getConfig();\n const debugOptions = { ...defaultDebugOptions, ...options };\n const json = renderer.toJSON();\n if (json) {\n return debug(json, debugOptions);\n }\n }\n return debugImpl;\n}\n"],"mappings":"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","ignoreList":[]}
|