From 7517b65dcd676f36d38f31c991929c32168b3e12 Mon Sep 17 00:00:00 2001 From: João Ferreiro Date: Thu, 22 Dec 2022 15:32:39 +0000 Subject: Unit testing (#32) * add testing lib * remove coverage folder from git * finished basic test setup * fix tests typescript and import paths * add first snapshot * testing utils * rename test files; update script flags; ++tests * testing utils functions * testing downloadAndResize wip * remove download test * specify unwanted coverage paths; remove update snapshots flag * fix strings tests * testing downloadAndResize method * increasing testing * fixing snapshots wip * fixed shell mobile snapshot * adding snapshots for the screens * fix onboard snapshot * fix typescript issues * fix TabsSelector snapshot * Account for testing device's locale in ago() tests * Remove platform detection on regex Co-authored-by: Paul Frazee --- jest/jestSetup.js | 39 +++++++++++++++++++++++++++++++++++++++ jest/test-utils.tsx | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 jest/jestSetup.js create mode 100644 jest/test-utils.tsx (limited to 'jest') diff --git a/jest/jestSetup.js b/jest/jestSetup.js new file mode 100644 index 000000000..7a2f10d2d --- /dev/null +++ b/jest/jestSetup.js @@ -0,0 +1,39 @@ +jest.mock('@react-native-async-storage/async-storage', () => + require('@react-native-async-storage/async-storage/jest/async-storage-mock'), +) +jest.mock('react-native/Libraries/EventEmitter/NativeEventEmitter') + +jest.mock('@fortawesome/react-native-fontawesome', () => ({ + FontAwesomeIcon: '', +})) + +require('react-native-reanimated/lib/reanimated2/jestUtils').setUpTests() + +// Silence the warning: Animated: `useNativeDriver` is not supported +jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper') + +jest.mock('react-native-safe-area-context', () => { + const inset = {top: 0, right: 0, bottom: 0, left: 0} + return { + SafeAreaProvider: jest.fn().mockImplementation(({children}) => children), + SafeAreaConsumer: jest + .fn() + .mockImplementation(({children}) => children(inset)), + useSafeAreaInsets: jest.fn().mockImplementation(() => inset), + } +}) + +jest.mock('@gorhom/bottom-sheet', () => { + const react = require('react-native') + return { + __esModule: true, + default: react.View, + namedExport: { + ...require('react-native-reanimated/mock'), + ...jest.requireActual('@gorhom/bottom-sheet'), + BottomSheetFlatList: react.FlatList, + }, + } +}) + +jest.useFakeTimers() diff --git a/jest/test-utils.tsx b/jest/test-utils.tsx new file mode 100644 index 000000000..a5946ed06 --- /dev/null +++ b/jest/test-utils.tsx @@ -0,0 +1,32 @@ +import React from 'react' +import RN from 'react-native' +import {render} from '@testing-library/react-native' +import {GestureHandlerRootView} from 'react-native-gesture-handler' +import {RootSiblingParent} from 'react-native-root-siblings' +import {SafeAreaProvider} from 'react-native-safe-area-context' +import {DEFAULT_SERVICE, RootStoreModel, RootStoreProvider} from '../src/state' +import {SessionServiceClient} from '../src/third-party/api/src' +import {sessionClient as AtpApi} from '../src/third-party/api' + +const WrappedComponent = ({children}: any) => { + const api = AtpApi.service(DEFAULT_SERVICE) as SessionServiceClient + const rootStore = new RootStoreModel(api) + return ( + + + + {children} + + + + ) +} + +const customRender = (ui: any, options?: any) => + render(ui, {wrapper: WrappedComponent, ...options}) + +// re-export everything +export * from '@testing-library/react-native' + +// override render method +export {customRender as render} -- cgit 1.4.1