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

添加WebView测试脚本遇Jest子进程重试超限错误,如何修改?

解决Jest测试WebView组件时的子进程异常问题

问题根源

WebView是依赖原生能力的组件,Jest的JS测试环境无法直接渲染这类组件,会导致子进程反复崩溃,最终触发"超过重试限制"的报错。

测试脚本修改方案

  • Mock WebView组件:直接在测试文件顶部mock掉真实的WebView,用空组件替代,避免触发原生渲染逻辑
    // 导入前先mock
    jest.mock('react-native-webview', () => ({
      WebView: () => null,
    }));
    
    test('should render correctly', () => {
      const navigation = {} as unknown as RootStackProps<'WEBVIEW'>['navigation'];
      const route = {
        params: {
          url: '**some url**',
        },
      } as unknown as RootStackProps<'WEBVIEW'>['route'];
    
      renderWithProviders(<WebView navigation={navigation} route={route} />);
    });
    
  • 进阶:验证props传递:如果需要确认组件是否正确传递参数,可以用jest.fn()替代,方便后续断言
    jest.mock('react-native-webview', () => ({
      WebView: jest.fn(() => null),
    }));
    
    import { WebView } from 'react-native-webview';
    
    test('should pass correct url to WebView', () => {
      const navigation = {} as unknown as RootStackProps<'WEBVIEW'>['navigation'];
      const testUrl = 'https://example.com';
      const route = {
        params: {
          url: testUrl,
        },
      } as unknown as RootStackProps<'WEBVIEW'>['route'];
    
      renderWithProviders(<WebView navigation={navigation} route={route} />);
      
      // 断言WebView收到了正确的url参数(根据你的组件实际传参逻辑调整)
      expect(WebView).toHaveBeenCalledWith(
        expect.objectContaining({
          source: { uri: testUrl },
          navigation,
          route
        }),
        expect.anything()
      );
    });
    
  • 全局Mock(可选):如果多个测试文件都用到WebView,可以在Jest配置中设置全局mock,避免重复代码
    1. 在项目根目录创建__mocks__/react-native-webview.js:
      module.exports = {
        WebView: jest.fn(() => null),
      };
      
    2. 修改jest.config.js:
      module.exports = {
        // 其他已有配置
        moduleNameMapper: {
          'react-native-webview': '<rootDir>/__mocks__/react-native-webview.js',
        },
      };
      

额外排查点

  • 若修改后仍报错,检查是否有其他未被mock的原生组件
  • 尝试清理Jest缓存:执行jest --clearCache后重新运行测试

内容的提问来源于stack exchange,提问作者Riku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:11:18