forked from ajsmth/earhart
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test-utils.tsx
70 lines (59 loc) · 1.63 KB
/
test-utils.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import {
render as rtlRender,
queryAllByTestId,
NativeTestInstance,
getQueriesForElement,
RenderOptions,
Queries,
} from '@testing-library/react-native';
function findFocused(container: NativeTestInstance): NativeTestInstance {
let screens = queryAllByTestId(container, /earhart-screen/i);
let maxDepth = 0;
let matchIndex = 0;
// finds rnl-screen with the highest focus depth in the tree
for (let i = 0; i < screens.length; i++) {
const screen = screens[i];
const depth = parseInt(screen.props.testID.replace(/^\D+/g, ''));
if (depth >= maxDepth) {
matchIndex = i;
maxDepth = depth;
}
}
return screens[matchIndex];
}
type IOptions = Omit<RenderOptions, 'queries'>;
function render(ui: any, options?: IOptions) {
const defaultOptions = {
options: {
debug: {
omitProps: [
'style',
'activeOpacity',
'activeOffsetX',
'pointerEvents',
'collapsable',
'underlineColorAndroid',
'rejectResponderTermination',
'allowFontScaling',
'testID',
],
},
},
};
function getFocused(container: NativeTestInstance) {
const focusedScreen = findFocused(container);
return {
container: focusedScreen,
debug: () => utils.debug(focusedScreen),
...getQueriesForElement(focusedScreen),
};
}
const utils = rtlRender(ui, { ...defaultOptions, ...options });
return {
...utils,
getFocused: (container?: NativeTestInstance) =>
getFocused(container || utils.container),
};
}
export * from '@testing-library/react-native';
export { render, findFocused };