Created
          January 8, 2018 01:41 
        
      - 
      
- 
        Save lededje/1d6f2ee009ae63e25cbec7318240e4ed to your computer and use it in GitHub Desktop. 
    This is a gist that patches react-native's components and apis with jest to allow you to use Enzyme's react 16 adapter
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | import React from 'react'; | |
| jest.mock('react-native', () => { | |
| const createMockComponent = (name) => { | |
| const mockedComponent = ({ children }) => ( | |
| <div>{children}</div> | |
| ); | |
| mockedComponent.displayName = name; | |
| return mockedComponent; | |
| } | |
| return { | |
| ActivityIndicator: createMockComponent('ActivityIndicator'), | |
| ART: createMockComponent('ART'), | |
| Button: createMockComponent('Button'), | |
| CheckBox: createMockComponent('CheckBox'), | |
| DatePickerIOS: createMockComponent('DatePickerIOS'), | |
| DrawerLayoutAndroid: createMockComponent('DrawerLayoutAndroid'), | |
| FlatList: createMockComponent('FlatList'), | |
| Image: createMockComponent('Image'), | |
| ImageBackground: createMockComponent('ImageBackground'), | |
| ImageEditor: createMockComponent('ImageEditor'), | |
| ImageStore: createMockComponent('ImageStore'), | |
| KeyboardAvoidingView: createMockComponent('KeyboardAvoidingView'), | |
| ListView: createMockComponent('ListView'), | |
| MaskedViewIOS: createMockComponent('MaskedViewIOS'), | |
| Modal: createMockComponent('Modal'), | |
| NavigatorIOS: createMockComponent('NavigatorIOS'), | |
| Picker: createMockComponent('Picker'), | |
| PickerIOS: createMockComponent('PickerIOS'), | |
| ProgressBarAndroid: createMockComponent('ProgressBarAndroid'), | |
| ProgressViewIOS: createMockComponent('ProgressViewIOS'), | |
| SafeAreaView: createMockComponent('SafeAreaView'), | |
| ScrollView: createMockComponent('ScrollView'), | |
| SectionList: createMockComponent('SectionList'), | |
| SegmentedControlIOS: createMockComponent('SegmentedControlIOS'), | |
| Slider: createMockComponent('Slider'), | |
| SnapshotViewIOS: createMockComponent('SnapshotViewIOS'), | |
| Switch: createMockComponent('Switch'), | |
| RefreshControl: createMockComponent('RefreshControl'), | |
| StatusBar: createMockComponent('StatusBar'), | |
| SwipeableFlatList: createMockComponent('SwipeableFlatList'), | |
| SwipeableListView: createMockComponent('SwipeableListView'), | |
| TabBarIOS: createMockComponent('TabBarIOS'), | |
| Text: createMockComponent('Text'), | |
| TextInput: createMockComponent('TextInput'), | |
| ToastAndroid: createMockComponent('ToastAndroid'), | |
| ToolbarAndroid: createMockComponent('ToolbarAndroid'), | |
| Touchable: createMockComponent('Touchable'), | |
| TouchableHighlight: createMockComponent('TouchableHighlight'), | |
| TouchableNativeFeedback: createMockComponent('TouchableNativeFeedback'), | |
| TouchableOpacity: createMockComponent('TouchableOpacity'), | |
| TouchableWithoutFeedback: createMockComponent('TouchableWithoutFeedback'), | |
| View: createMockComponent('View'), | |
| ViewPagerAndroid: createMockComponent('ViewPagerAndroid'), | |
| VirtualizedList: createMockComponent('VirtualizedList'), | |
| WebView: createMockComponent('WebView'), | |
| AccessibilityInfo: ({ | |
| fetch: jest.fn(), | |
| addEventListener: jest.fn(), | |
| setAccessibilityFocus: jest.fn(), | |
| announceForAccessibility: jest.fn(), | |
| removeEventListener: jest.fn(), | |
| }), | |
| ActionSheetIOS: ({ | |
| showActionSheetWithOptions: jest.fn(), | |
| showShareActionSheetWithOptions: jest.fn(), | |
| }), | |
| Alert: ({ | |
| alert: jest.fn(), | |
| }), | |
| AlertIOS: ({ | |
| alert: jest.fn(), | |
| prompt: jest.fn(), | |
| }), | |
| Animated: ({ | |
| decay: jest.fn(), | |
| timing: jest.fn(), | |
| spring: jest.fn(), | |
| add: jest.fn(), | |
| divide: jest.fn(), | |
| multiply: jest.fn(), | |
| modulo: jest.fn(), | |
| diffClamp: jest.fn(), | |
| delay: jest.fn(), | |
| sequence: jest.fn(), | |
| parallel: jest.fn(), | |
| stagger: jest.fn(), | |
| loop: jest.fn(), | |
| event: jest.fn(), | |
| forkEvent: jest.fn(), | |
| unforkEvent: jest.fn(), | |
| }), | |
| AppRegistry: ({ | |
| setWrapperComponentProvider: jest.fn(), | |
| registerConfig: jest.fn(), | |
| registerComponent: jest.fn(), | |
| registerRunnable: jest.fn(), | |
| registerSection: jest.fn(), | |
| getAppKeys: jest.fn(), | |
| getSectionKeys: jest.fn(), | |
| getSections: jest.fn(), | |
| getRunnable: jest.fn(), | |
| getRegistry: jest.fn(), | |
| setComponentProviderInstrumentationHook: jest.fn(), | |
| runApplication: jest.fn(), | |
| unmountApplicationComponentAtRootTag: jest.fn(), | |
| registerHeadlessTask: jest.fn(), | |
| startHeadlessTask: jest.fn(), | |
| }), | |
| AppState: ({ | |
| addEventListener: jest.fn(), | |
| removeEventListener: jest.fn(), | |
| }), | |
| AsyncStorage: ({ | |
| getItem: jest.fn(), | |
| setItem: jest.fn(), | |
| removeItem: jest.fn(), | |
| mergeItem: jest.fn(), | |
| clear: jest.fn(), | |
| getAllKeys: jest.fn(), | |
| flushGetRequests: jest.fn(), | |
| multiGet: jest.fn(), | |
| multiSet: jest.fn(), | |
| multiRemove: jest.fn(), | |
| multiMerge: jest.fn(), | |
| }), | |
| BackAndroid: ({ | |
| exitApp: jest.fn(), | |
| addEventListener: jest.fn(), | |
| removeEventListener: jest.fn(), | |
| }), | |
| BackHandler: ({ | |
| exitApp: jest.fn(), | |
| addEventListener: jest.fn(), | |
| removeEventListener: jest.fn(), | |
| }), | |
| CameraRoll: ({ | |
| saveToCameraRoll: jest.fn(), | |
| getPhotos: jest.fn(), | |
| }), | |
| Clipboard: ({ | |
| getString: jest.fn(), | |
| setString: jest.fn(), | |
| }), | |
| DatePickerAndroid: ({ | |
| open: jest.fn(), | |
| dateSetAction: jest.fn(), | |
| dismissedAction: jest.fn(), | |
| }), | |
| DeviceInfo: undefined, | |
| Dimensions: ({ | |
| set: jest.fn(), | |
| get: jest.fn(), | |
| addEventListener: jest.fn(), | |
| removeEventListener: jest.fn(), | |
| }), | |
| Easing: ({ | |
| step0: jest.fn(), | |
| step1: jest.fn(), | |
| linear: jest.fn(), | |
| ease: jest.fn(), | |
| quad: jest.fn(), | |
| cubic: jest.fn(), | |
| poly: jest.fn(), | |
| sin: jest.fn(), | |
| circle: jest.fn(), | |
| exp: jest.fn(), | |
| elastic: jest.fn(), | |
| back: jest.fn(), | |
| bounce: jest.fn(), | |
| bezier: jest.fn(), | |
| in: jest.fn(), | |
| out: jest.fn(), | |
| inOut: jest.fn(), | |
| }), | |
| findNodeHandle: undefined, | |
| I18nManager: undefined, | |
| ImagePickerIOS: ({ | |
| canRecordVideos: jest.fn(), | |
| canUseCamera: jest.fn(), | |
| openCameraDialog: jest.fn(), | |
| openSelectDialog: jest.fn(), | |
| }), | |
| InteractionManager: ({ | |
| runAfterInteractions: jest.fn(), | |
| createInteractionHandle: jest.fn(), | |
| clearInteractionHandle: jest.fn(), | |
| setDeadline: jest.fn(), | |
| }), | |
| Keyboard: ({ | |
| addListener: jest.fn(), | |
| removeListener: jest.fn(), | |
| removeAllListeners: jest.fn(), | |
| dismiss: jest.fn(), | |
| }), | |
| LayoutAnimation: ({ | |
| configureNext: jest.fn(), | |
| create: jest.fn(), | |
| checkConfig: jest.fn(), | |
| }), | |
| Linking: ({ | |
| constructor: jest.fn(), | |
| addEventListener: jest.fn(), | |
| removeEventListener: jest.fn(), | |
| openURL: jest.fn(), | |
| canOpenURL: jest.fn(), | |
| getInitialURL: jest.fn(), | |
| }), | |
| NativeEventEmitter: undefined, | |
| NetInfo: ({ | |
| addEventListener: jest.fn(), | |
| removeEventListener: jest.fn(), | |
| fetch: jest.fn(), | |
| getConnectionInfo: jest.fn(), | |
| isConnectionExpensive: jest.fn(), | |
| }), | |
| PanResponder: ({ | |
| create: jest.fn(), | |
| }), | |
| PermissionsAndroid: ({ | |
| constructor: jest.fn(), | |
| checkPermission: jest.fn(), | |
| check: jest.fn(), | |
| requestPermission: jest.fn(), | |
| request: jest.fn(), | |
| requestMultiple: jest.fn(), | |
| }), | |
| PixelRatio: ({ | |
| get: jest.fn(), | |
| getFontScale: jest.fn(), | |
| getPixelSizeForLayoutSize: jest.fn(), | |
| roundToNearestPixel: jest.fn(), | |
| startDetecting: jest.fn(), | |
| }), | |
| PushNotificationIOS: ({ | |
| scheduleLocalNotification: jest.fn(), | |
| cancelAllLocalNotifications: jest.fn(), | |
| removeAllDeliveredNotifications: jest.fn(), | |
| getDeliveredNotifications: jest.fn(), | |
| removeDeliveredNotifications: jest.fn(), | |
| setApplicationIconBadgeNumber: jest.fn(), | |
| getApplicationIconBadgeNumber: jest.fn(), | |
| cancelLocalNotifications: jest.fn(), | |
| getScheduledLocalNotifications: jest.fn(), | |
| addEventListener: jest.fn(), | |
| removeEventListener: jest.fn(), | |
| requestPermissions: jest.fn(), | |
| abandonPermissions: jest.fn(), | |
| checkPermissions: jest.fn(), | |
| getInitialNotification: jest.fn(), | |
| constructor: jest.fn(), | |
| finish: jest.fn(), | |
| getMessage: jest.fn(), | |
| getSound: jest.fn(), | |
| getCategory: jest.fn(), | |
| getAlert: jest.fn(), | |
| getContentAvailable: jest.fn(), | |
| getBadgeCount: jest.fn(), | |
| getData: jest.fn(), | |
| }), | |
| Settings: ({ | |
| get: jest.fn(), | |
| set: jest.fn(), | |
| watchKeys: jest.fn(), | |
| clearWatch: jest.fn(), | |
| }), | |
| Share: ({ | |
| share: jest.fn(), | |
| sharedAction: jest.fn(), | |
| dismissedAction: jest.fn(), | |
| }), | |
| StatusBarIOS: undefined, | |
| StyleSheet: { | |
| setStyleAttributePreprocessor: jest.fn(), | |
| create: jest.fn((styles) => { | |
| return Object.keys(styles).reduce((acc, styleKey) => { | |
| return Object.assign(acc, { [styleKey]: styleKey }) | |
| }, {}); | |
| }), | |
| }, | |
| Systrace: ({ | |
| installReactHook: jest.fn(), | |
| setEnabled: jest.fn(), | |
| isEnabled: jest.fn(), | |
| beginEvent: jest.fn(), | |
| endEvent: jest.fn(), | |
| beginAsyncEvent: jest.fn(), | |
| endAsyncEvent: jest.fn(), | |
| counterEvent: jest.fn(), | |
| attachToRelayProfiler: jest.fn(), | |
| swizzleJSON: jest.fn(), | |
| measureMethods: jest.fn(), | |
| measure: jest.fn(), | |
| }), | |
| TimePickerAndroid: ({ | |
| open: jest.fn(), | |
| timeSetAction: jest.fn(), | |
| dismissedAction: jest.fn(), | |
| }), | |
| TVEventHandler: undefined, | |
| UIManager: undefined, | |
| unstable_batchedUpdates: undefined, | |
| Vibration: ({ | |
| vibrate: jest.fn(), | |
| cancel: jest.fn(), | |
| }), | |
| VibrationIOS: ({ | |
| vibrate: jest.fn(() => { | |
| console.warn('VibrationIOS is deprecated, use Vibration instead'); | |
| }), | |
| }), | |
| } | |
| }) | |
| import { configure } from 'enzyme'; | |
| import Adapter from 'enzyme-adapter-react-16'; | |
| configure({ adapter: new Adapter() }); | 
I'm interested -- I've forked it in my own project.
great, thanks for sharing
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment
  
            
Leave a comment if you are interested in this gist. If there is enough interest I'll take the time to keep adding to this and improve the mocks, mimicking the clipboard functionality for example.