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

如何在React Native中用Jest模拟具名导入的BiometryTypes常量

解决react-native-biometrics中BiometryTypes的Jest模拟问题

我在项目中使用react-native-biometrics库编写单元测试时,已经成功模拟了库的核心类,但始终无法正确模拟导出的BiometryTypes常量。

当前问题场景

原模拟代码仅覆盖了ReactNativeBiometrics类:

import ReactNativeBiometrics, { BiometryTypes } from 'react-native-biometrics';

jest.mock('react-native-biometrics', () => {
  class ReactNativeBiometrics {
    constructor(){}
    isSensorAvailable() {}
  }
  return ReactNativeBiometrics;
});

BiometryTypes的实际导出是一个包含三个字符串常量的对象:

export declare const BiometryTypes: {
    TouchID: string;
    FaceID: string;
    Biometrics: string;
};

我曾尝试直接修改导入的模块对象,但没有效果:

import { BiometryTypes } from 'react-native-biometrics';
import * as all from 'react-native-biometrics';

const TouchID = 'TouchID';
all.BiometryTypes = {
  TouchID: TouchID,
  FaceID: TouchID
};

正确的模拟方案

要同时模拟类和命名导出的常量,需要在jest.mock的返回对象中同时包含默认导出(类)和命名导出(BiometryTypes),并且标记为ES模块:

import ReactNativeBiometrics, { BiometryTypes } from 'react-native-biometrics';

jest.mock('react-native-biometrics', () => {
  // 模拟ReactNativeBiometrics类及方法
  class MockReactNativeBiometrics {
    constructor() {}
    
    isSensorAvailable() {
      // 可根据测试需求返回自定义模拟结果
      return Promise.resolve({
        available: true,
        biometryType: BiometryTypes.TouchID
      });
    }
    // 其他需要测试的方法也可在此添加模拟逻辑
  }

  // 模拟BiometryTypes常量对象
  const MockBiometryTypes = {
    TouchID: 'TouchID',
    FaceID: 'FaceID',
    Biometrics: 'Biometrics'
  };

  // 返回包含所有导出的对象,__esModule标记确保ES模块解析正常
  return {
    __esModule: true,
    default: MockReactNativeBiometrics,
    BiometryTypes: MockBiometryTypes
  };
});

关键要点

  • __esModule标记:必须添加这个属性,Jest才能正确识别ES模块的导出结构,确保命名导出的BiometryTypes能被正确导入。
  • 同时覆盖类和常量:返回对象中要同时提供default(对应原库的默认导出类)和BiometryTypes(模拟的常量对象),这样两种导入方式都能获取到模拟值。
  • 方法模拟的一致性:在模拟类的方法时,可以直接使用模拟的BiometryTypes常量,保证测试逻辑的统一性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:35:19