如何Mock@react-native-firebase/remote-config?调用setDefaults时报错
问题描述
尝试Mock npm库@react-native-firebase/remote-config模块时,持续收到如下错误:
Test suite failed to run
TypeError: (0 , _remoteConfig.default)(...).setDefaults is not a function
Mock代码如下:
jest.mock("@react-native-firebase/remote-config", () => ({ __esModule: true, default: () => ({ remoteConfig: jest.fn(() => ({ setDefaults: jest.fn(), })), }), }));
调用代码如下:
import remoteConfig from '@react-native-firebase/remote-config'; // set defaults remoteConfig().setDefaults(firebaseRemoteConfig); // fetch remote config . . .
显然Mock写法有误,但不清楚问题出在哪里。
问题分析与解决
你的Mock结构匹配错误——调用remoteConfig()后,代码期望返回的实例直接拥有setDefaults方法,但当前Mock中,default对应的函数返回的是一个包含remoteConfig方法的对象,而非直接带setDefaults的实例。
正确的Mock应该让default对应的函数直接返回包含setDefaults的对象,因为你的业务代码是remoteConfig().setDefaults(...),即导入的remoteConfig函数执行后,返回的实例本身就具备setDefaults方法。
修改后的Mock代码:
jest.mock("@react-native-firebase/remote-config", () => ({ __esModule: true, default: jest.fn(() => ({ setDefaults: jest.fn(), // 后续若需Mock其他方法(如fetch、activate),可直接在此添加 fetch: jest.fn(), activate: jest.fn() })), }));
修改后,调用remoteConfig()会直接得到带有setDefaults方法的Mock对象,即可解决报错问题。
内容的提问来源于stack exchange,提问作者Jaichand Khatik
相关产品推荐
相关产品推荐

