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

React Native Google Mobile Ads集成React Testing Library测试报错求助

解决React Native Google Mobile Ads测试时TurboModule找不到的问题

以下是几种实用的解决方案,帮你在测试环境避开原生广告库的导入问题,同时能正常测试集成组件:

1. 单测试文件Mock广告库

在你的组件测试文件顶部,直接Mock整个react-native-google-mobile-ads库,返回模拟的组件和常量:

jest.mock('react-native-google-mobile-ads', () => ({
  BannerAd: () => null, // 测试时渲染空组件,也可以换成带testID的View方便断言
  BannerAdSize: { BANNER: 'banner', LARGE_BANNER: 'large-banner' },
  // 如果你用到了其他模块(比如InterstitialAd),也需要在这里Mock
  InterstitialAd: jest.fn(),
}));

这样测试时导入广告库的代码会指向这个Mock,不会触发原生模块查找。

2. 组件层面条件导入/替换

在集成广告的业务组件里,根据环境条件选择导入真实广告组件还是测试用占位组件:

import { View } from 'react-native';

// 条件导入广告组件
let BannerAd;
if (process.env.NODE_ENV !== 'test') {
  const { BannerAd: RealBannerAd } = require('react-native-google-mobile-ads');
  BannerAd = RealBannerAd;
} else {
  // 测试环境用占位组件,可加testID方便测试断言
  BannerAd = (props) => <View testID="test-ad-banner" {...props} />;
}

// 业务组件里正常使用BannerAd
export default function HomeScreen() {
  return (
    <View>
      {/* 其他内容 */}
      <BannerAd
        unitId="your-ad-unit-id"
        size="banner"
      />
    </View>
  );
}

这种方法不用修改测试文件,组件自身会在测试环境自动切换成占位组件。

3. 全局配置Jest Mock

如果多个测试文件都用到广告库,可以在Jest的全局配置文件(比如setupTests.js)里添加全局Mock,一劳永逸:

// setupTests.js
jest.mock('react-native-google-mobile-ads', () => {
  const { View } = require('react-native');
  return {
    BannerAd: (props) => <View testID="mock-ads-banner" {...props} />,
    BannerAdSize: {
      BANNER: 'banner',
      MEDIUM_RECTANGLE: 'medium-rectangle',
      FULL_BANNER: 'full-banner',
    },
    // 按需Mock你项目中用到的其他API
    RewardedAd: jest.fn().mockReturnValue({
      load: jest.fn(),
      show: jest.fn(),
    }),
  };
});

记得在jest.config.js里把setupFilesAfterEnv指向这个setupTests.js文件。

这些方法的核心都是用Mock替代原生广告模块,避免测试环境加载未实现的TurboModule,同时不影响业务组件的测试逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:11:18