Skip to content
This repository was archived by the owner on Jul 30, 2020. It is now read-only.

Commit e080c06

Browse files
Sophie AuSophie Au
authored andcommitted
Expose async render and fireEvent functions
1 parent 4efa985 commit e080c06

File tree

1 file changed

+68
-1
lines changed

1 file changed

+68
-1
lines changed

src/index.js

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,45 @@ function render(ui, { options = {}, wrapper: WrapperComponent, queries } = {}) {
5353
};
5454
}
5555

56+
async function asyncRender(ui, { options = {}, wrapper: WrapperComponent, queries } = {}) {
57+
const wrapUiIfNeeded = innerElement =>
58+
WrapperComponent ? (
59+
<AppContainer>
60+
<WrapperComponent>{innerElement}</WrapperComponent>
61+
</AppContainer>
62+
) : (
63+
<AppContainer>{innerElement}</AppContainer>
64+
);
65+
66+
let testRenderer;
67+
68+
await act(async () => {
69+
testRenderer = TR.create(wrapUiIfNeeded(ui), options);
70+
});
71+
72+
renderers.add(testRenderer);
73+
74+
const wrappers = proxyElement(testRenderer.root).findAll(n => n.type === 'View');
75+
const baseElement = wrappers[0]; // Includes YellowBox and your render
76+
const container = wrappers[1]; // Includes only your render
77+
78+
return {
79+
baseElement,
80+
container,
81+
debug: (el = baseElement) => console.log(prettyPrint(el)),
82+
unmount: () => testRenderer.unmount(),
83+
rerender: async rerenderUi => {
84+
await act(async () => {
85+
testRenderer.update(wrapUiIfNeeded(rerenderUi));
86+
});
87+
},
88+
asJSON: () => {
89+
return toJSON(container);
90+
},
91+
...getQueriesForElement(baseElement, queries),
92+
};
93+
}
94+
5695
function cleanup() {
5796
renderers.forEach(cleanupRenderer);
5897
}
@@ -70,6 +109,14 @@ function fireEvent(...args) {
70109
return returnValue;
71110
}
72111

112+
async function asyncFireEvent(...args) {
113+
let returnValue;
114+
await act(async () => {
115+
returnValue = rntlFireEvent(...args);
116+
});
117+
return returnValue;
118+
}
119+
73120
Object.keys(rntlFireEvent).forEach(typeArg => {
74121
fireEvent[typeArg] = (...args) => {
75122
let returnValue;
@@ -80,5 +127,25 @@ Object.keys(rntlFireEvent).forEach(typeArg => {
80127
};
81128
});
82129

130+
Object.keys(rntlFireEvent).forEach(typeArg => {
131+
fireEvent[typeArg] = (...args) => {
132+
let returnValue;
133+
act(() => {
134+
returnValue = rntlFireEvent[typeArg](...args);
135+
});
136+
return returnValue;
137+
};
138+
});
139+
140+
Object.keys(rntlFireEvent).forEach(async typeArg => {
141+
asyncFireEvent[typeArg] = async (...args) => {
142+
let returnValue;
143+
await act(async () => {
144+
returnValue = rntlFireEvent[typeArg](...args);
145+
});
146+
return returnValue;
147+
};
148+
});
149+
83150
export * from './lib';
84-
export { act, cleanup, fireEvent, render, NativeTestEvent };
151+
export { act, cleanup, fireEvent, asyncFireEvent, render, asyncRender, NativeTestEvent };

0 commit comments

Comments
 (0)