React Native测试analytics-react-native遇链接警告及Mock报错,求正确方案
解决
analytics-react-native Jest测试中的警告与Mock错误问题 1. 修复Super expression must either be null or a function错误
这个错误源于你的Mock结构与@segment/analytics-react-native的实际导出不匹配,需根据业务代码的使用方式调整Mock:
情况1:通过createClient初始化客户端
如果业务代码是如下写法:
import { createClient } from '@segment/analytics-react-native'; const analytics = createClient({ writeKey: 'xxx' });
对应的正确Mock:
jest.mock('@segment/analytics-react-native', () => ({ createClient: jest.fn(() => ({ setup: jest.fn(), identify: jest.fn(), reset: jest.fn(), // 按需添加业务中用到的其他方法,比如track、screen等 })), }));
情况2:直接导入默认导出的实例
如果业务代码是如下写法:
import analytics from '@segment/analytics-react-native'; analytics.setup({ writeKey: 'xxx' });
对应的正确Mock:
jest.mock('@segment/analytics-react-native', () => ({ setup: jest.fn(), identify: jest.fn(), reset: jest.fn(), // 按需添加其他用到的方法 }));
情况3:代码中存在类实例化场景
如果业务代码需要实例化库中的类,需模拟类结构:
jest.mock('@segment/analytics-react-native', () => { const MockAnalytics = jest.fn(); MockAnalytics.prototype.setup = jest.fn(); MockAnalytics.prototype.identify = jest.fn(); MockAnalytics.prototype.reset = jest.fn(); return MockAnalytics; });
2. 消除sovran-react-native与原生模块警告
警告是因为Jest测试环境不支持原生模块,可通过Mocksovran-react-native屏蔽:
在Jest全局配置文件(如jest.setup.js)中添加:
jest.mock('sovran-react-native', () => ({ createStore: jest.fn(), Store: jest.fn().mockImplementation(() => ({ getState: jest.fn(), setState: jest.fn(), subscribe: jest.fn(), })), }));
若无需模拟具体方法,也可简化为:
jest.mock('sovran-react-native', () => ({}));
内容的提问来源于stack exchange,提问作者Kanwarjeet Singh
相关产品推荐
相关产品推荐

