-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathhelpers.tsx
More file actions
70 lines (61 loc) · 2.25 KB
/
helpers.tsx
File metadata and controls
70 lines (61 loc) · 2.25 KB
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 React, { ReactElement } from 'react';
import { render } from 'react-native-testing-library';
import { Provider } from 'react-redux';
import { NavigationScreenProp } from 'react-navigation';
import { Toaster } from '../../components/Toaster';
import watchAll from '../../modules/saga';
import { ThemeProvider } from 'styled-components';
import { theme } from '../theme';
import { IAppState } from '../../modules/types';
import { createInitialiasedStore, sagaMiddlewareTest } from './mockStore';
import { storeManager } from '../../modules/storeManager';
import { createAppContainerWithInitialRoute } from '../../navigation/stack';
/**
* If you need to have a wrapper around your page, use it in pageContainerComponent (like the Redux Provider)
* If you need a component rendered outside your page (like a Toaster), do the same
*/
export const renderPage = (page: ReactElement, initialState?: Partial<IAppState>) => {
storeManager.store = createInitialiasedStore(initialState);
sagaMiddlewareTest.run(watchAll);
const pageContainerComponent = (
<ThemeProvider theme={theme}>
<Provider store={storeManager.store}>
{page}
<Toaster />
</Provider>
</ThemeProvider>
);
const pageRendered = render(pageContainerComponent);
const refresh = () => pageRendered.rerender(pageContainerComponent);
return { ...pageRendered, refresh };
};
export const getPropsWithNavigation = (
props?: any,
navigationPropExtension?: Partial<NavigationScreenProp<{}>>
) =>
({
...props,
navigation: {
navigate: jest.fn(),
goBack: jest.fn(),
...navigationPropExtension,
},
} as any);
export const getMockApiResponse = (status: number, data: any = {}) => ({
status,
body: { data },
});
export const renderWithNavigation = (pageRoute: string, initialState?: IAppState) => {
const App = createAppContainerWithInitialRoute(pageRoute);
storeManager.store = createInitialiasedStore(initialState);
sagaMiddlewareTest.run(watchAll);
const pageContainerComponent = (
<Provider store={storeManager.store}>
<App />
<Toaster />
</Provider>
);
const pageRendered = render(pageContainerComponent);
const refresh = () => pageRendered.rerender(pageContainerComponent);
return { ...pageRendered, refresh };
};