You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:05:22