mirror of
https://github.com/inaturalist/iNaturalistReactNative.git
synced 2026-05-07 15:16:05 -04:00
* Get a few mocks working in __mocks__ folder * Move more mocks into __mocks__ * Move mocks * Move zustand mock * Add more mocks to __mocks__ * More mocks * Move more files to __mocks__ and audit existing mocks * Mock react navigation in __mocks__ * Restore test to help with imports after jest env torn down * Add fake timer to integration test with userEvent * Add RN paper mock
94 lines
3.3 KiB
JavaScript
94 lines
3.3 KiB
JavaScript
import "react-native-gesture-handler/jestSetup";
|
|
import "@shopify/flash-list/jestSetup";
|
|
|
|
import mockBottomSheet from "@gorhom/bottom-sheet/mock";
|
|
import mockRNCNetInfo from "@react-native-community/netinfo/jest/netinfo-mock";
|
|
import inatjs from "inaturalistjs";
|
|
import fetchMock from "jest-fetch-mock";
|
|
import mockBackHandler from "react-native/Libraries/Utilities/__mocks__/BackHandler";
|
|
import mockRNDeviceInfo from "react-native-device-info/jest/react-native-device-info-mock";
|
|
import mockSafeAreaContext from "react-native-safe-area-context/jest/mock";
|
|
|
|
import factory, { makeResponse } from "./factory";
|
|
|
|
// this resolves error with importing file after Jest environment is torn down
|
|
// https://github.com/react-navigation/react-navigation/issues/9568#issuecomment-881943770
|
|
jest.mock( "@react-navigation/native/lib/commonjs/useLinking.native", ( ) => ( {
|
|
default: ( ) => ( { getInitialState: { then: jest.fn( ) } } ),
|
|
__esModule: true
|
|
} ) );
|
|
// tests seem to be slower without this global reanimated mock
|
|
global.ReanimatedDataMock = {
|
|
now: () => 0
|
|
};
|
|
|
|
// Mock the react-native-logs config because it has a dependency on AuthenticationService
|
|
// instead use console.logs for tests
|
|
jest.mock( "../react-native-logs.config", () => {
|
|
const log = {
|
|
extend: jest.fn( () => ( {
|
|
debug: msg => console.debug( msg ),
|
|
info: msg => console.info( msg ),
|
|
warn: msg => console.warn( msg ),
|
|
error: msg => console.error( msg )
|
|
} ) )
|
|
};
|
|
return {
|
|
log,
|
|
logFilePath: "inaturalist-rn-log.txt"
|
|
};
|
|
} );
|
|
|
|
jest.mock( "@gorhom/bottom-sheet", () => ( {
|
|
...mockBottomSheet,
|
|
__esModule: true
|
|
} ) );
|
|
jest.mock( "@react-native-community/netinfo", () => mockRNCNetInfo );
|
|
jest.mock( "react-native-device-info", () => mockRNDeviceInfo );
|
|
jest.mock( "react-native-safe-area-context", () => mockSafeAreaContext );
|
|
jest.mock(
|
|
"react-native/Libraries/Utilities/BackHandler",
|
|
() => mockBackHandler
|
|
);
|
|
|
|
require( "react-native-reanimated" ).setUpTests();
|
|
|
|
// Some test environments may need a little more time
|
|
jest.setTimeout( 50000 );
|
|
|
|
// Mock inaturalistjs so we can make some fake responses
|
|
jest.mock( "inaturalistjs" );
|
|
inatjs.observations.search.mockResolvedValue( makeResponse( ) );
|
|
inatjs.observations.updates.mockResolvedValue( makeResponse( ) );
|
|
|
|
// Set up mocked fetch for testing (or disabling) fetch requests
|
|
fetchMock.enableMocks( );
|
|
fetchMock.dontMock( );
|
|
|
|
const mockIconicTaxon = factory( "RemoteTaxon", {
|
|
is_iconic: true,
|
|
name: "Mock iconic taxon"
|
|
} );
|
|
inatjs.taxa.search.mockResolvedValue( makeResponse( [mockIconicTaxon] ) );
|
|
|
|
inatjs.announcements.search.mockResolvedValue( makeResponse( ) );
|
|
inatjs.observations.updates.mockResolvedValue( makeResponse( ) );
|
|
|
|
// the following two mocks are both needed for react-native-keep-awake
|
|
jest.mock( "@sayem314/react-native-keep-awake" );
|
|
jest.mock( "react-native/Libraries/TurboModule/TurboModuleRegistry", () => {
|
|
const turboModuleRegistry = jest
|
|
.requireActual( "react-native/Libraries/TurboModule/TurboModuleRegistry" );
|
|
return {
|
|
...turboModuleRegistry,
|
|
getEnforcing: name => {
|
|
// List of TurboModules libraries to mock.
|
|
const modulesToMock = ["ReactNativeKCKeepAwake", "FileReaderModule"];
|
|
if ( modulesToMock.includes( name ) ) {
|
|
return null;
|
|
}
|
|
return turboModuleRegistry.getEnforcing( name );
|
|
}
|
|
};
|
|
} );
|