Javascript React Native jest test:TypeError:无法读取属性';取消订阅主题';未定义的

Javascript React Native jest test:TypeError:无法读取属性';取消订阅主题';未定义的,javascript,android,react-native,firebase-cloud-messaging,jestjs,Javascript,Android,React Native,Firebase Cloud Messaging,Jestjs,我正在使用andjest测试我的React原生应用程序。我有一个非常基本的测试,它看起来像这样: import 'react-native'; import React from 'react'; import PushController from '../app/PushController'; // Note: test renderer must be required after react-native. import renderer from 'react-test-render

我正在使用and
jest
测试我的React原生应用程序。我有一个非常基本的测试,它看起来像这样:

import 'react-native';
import React from 'react';
import PushController from '../app/PushController';
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';

it('works correctly', () => {
  const tree = renderer.create(
    <PushController />
  );
});
但是,当运行测试时,我得到

__tests__/PushControllerTest.js
  ● works correctly

    TypeError: Cannot read property 'unsubscribeFromTopic' of undefined

      at Object.FCM.unsubscribeFromTopic (node_modules/react-native-fcm/index.js:86:15)
      at PushController.componentDidMount (app/PushController.js:44:26)
      at node_modules/react-test-renderer/lib/ReactCompositeComponent.js:265:25
      at measureLifeCyclePerf (node_modules/react-test-renderer/lib/ReactCompositeComponent.js:75:12)
      at node_modules/react-test-renderer/lib/ReactCompositeComponent.js:264:11
      at CallbackQueue.notifyAll (node_modules/react-test-renderer/lib/CallbackQueue.js:76:22)
      at ReactTestReconcileTransaction.ON_DOM_READY_QUEUEING.close (node_modules/react-test-renderer/lib/ReactTestReconcileTransaction.js:36:26)
      at ReactTestReconcileTransaction.TransactionImpl.closeAll (node_modules/react-test-renderer/lib/Transaction.js:206:25)
      at ReactTestReconcileTransaction.TransactionImpl.perform (node_modules/react-test-renderer/lib/Transaction.js:153:16)
      at batchedMountComponentIntoNode (node_modules/react-test-renderer/lib/ReactTestMount.js:69:27)

我试过在测试中包含很多东西,比如
jest.mock('react-native-fcm')
和其他东西,但我根本无法让它工作。我知道,
jest
会自动模拟库,但我不明白为什么
FCM
没有定义。有什么想法吗?

我终于解决了!只是需要把我的测试改成

import 'react-native';
import React from 'react';
import PushController from '../app/PushController';
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';
import FCM from 'react-native-fcm'; // <-- This

it('works correctly', () => {
  FCM.unsubscribeFromTopic = jest.fn(); // <-- These two 
  FCM.subscribeToTopic = jest.fn();
  const tree = renderer.create(
    <PushController />
  );
});
导入“react native”;
从“React”导入React;
从“../app/PushController”导入PushController;
//注意:在react native之后必须使用测试呈现程序。
从“反应测试渲染器”导入渲染器;
从“反应本机FCM”导入FCM;//{
FCM.unsubscribeFromTopic=jest.fn()//
import 'react-native';
import React from 'react';
import PushController from '../app/PushController';
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';
import FCM from 'react-native-fcm'; // <-- This

it('works correctly', () => {
  FCM.unsubscribeFromTopic = jest.fn(); // <-- These two 
  FCM.subscribeToTopic = jest.fn();
  const tree = renderer.create(
    <PushController />
  );
});