jest/jest.setup.js (79 lines of code) (raw):
/**
 * Copyright (c) Facebook, Inc. and its affiliates.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow strict-local
 * @format
 */
import MockAsyncStorage from 'mock-async-storage';
import {Image, NativeModules} from 'react-native';
NativeModules.RNCNetInfo = {
  addListener: jest.fn(),
  removeListeners: jest.fn(),
};
Image.getSize = jest.fn();
const mockImpl = new MockAsyncStorage();
jest.mock('@react-native-community/async-storage', () => mockImpl);
jest.mock('fbt', () => {
  return {
    fbt: jest.fn(() => jest.fn()),
    toString: jest.fn(),
  }
})
jest.mock('nullthrows', () => {
  return {
    nullthrows: jest.fn(),
  }
});
jest.mock('react-native-device-info', () => {
  return {
    getBuildNumber: jest.fn(),
    getApplicationName: jest.fn(),
    getModel: jest.fn(),
    getBrand: jest.fn(),
    getBundleId: jest.fn(),
    getDeviceId: jest.fn(),
    getModel: jest.fn(),
    getReadableVersion: jest.fn(),
    getSystemVersion: jest.fn(),
    getVersion: jest.fn(),
    isTablet: jest.fn(),
    getApiLevel: jest.fn(),
    getAvailableLocationProviders: jest.fn(),
    getBuildId: jest.fn(),
    getCarrier: jest.fn(),
    getCodename: jest.fn(),
    getDevice: jest.fn(),
    getDisplay: jest.fn(),
    getDeviceName: jest.fn(),
    getFirstInstallTime: jest.fn(),
    getFreeDiskStorage: jest.fn(),
    getHardware: jest.fn(),
    getHost: jest.fn(),
    getIncremental: jest.fn(),
    getInstallerPackageName: jest.fn(),
    getInstallReferrer: jest.fn(),
    getLastUpdateTime: jest.fn(),
    getManufacturer: jest.fn(),
    getProduct: jest.fn(),
    getTags: jest.fn(),
    getType: jest.fn(),
    getUserAgent: jest.fn(),
    isEmulator: jest.fn(),
    supportedAbis: jest.fn(),
    isAirplaneMode: jest.fn(),
    isBatteryCharging: jest.fn(),
    isLocationEnabled: jest.fn(),
    getPowerState: jest.fn(),
  };
});
function initTimeControls() {
  const MockDate = require('mockdate');
  const timerIncrement = 10;
  global.managedClock = (funcToCall) => {
      MockDate.set(0);
      jest.useFakeTimers();
      funcToCall();
      MockDate.reset();
      jest.useRealTimers();
  }
  global.moveTimeForward = (time = timerIncrement) => {
      const moveTime = () => {
          const now = Date.now();
          MockDate.set(new Date(now + timerIncrement));
          jest.advanceTimersByTime(timerIncrement);
      }
      const frames = time / timerIncrement;
      for (let i = 0; i < frames; i++) {
        moveTime();
      }
  }
}
initTimeControls();