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

Expo SDK47更新后Jest无法读取app.config常量的问题排查

Expo SDK46升级至SDK47后Jest读取app.config环境变量失败的问题解析

核心原因与对应解决办法

1. Mock结构不匹配SDK47的expo-constants结构

SDK46起Constants.manifest被废弃,SDK47中expo-constants的环境变量完全迁移到Constants.expoConfig.extra下。你之前的mock直接返回extra属性,和实际结构不符,导致代码读取Constants.expoConfig.extra时拿到undefined。

正确的Mock写法:

jest.mock('expo-constants', () => ({
  expoConfig: {
    extra: {
      api: 'your-test-api-url'
    }
  }
}));

2. jest-expo预设的默认Mock覆盖了自定义Mock

SDK47的jest-expo预设可能默认对expo-constants做了基础mock,导致你的自定义mock未生效。可以先取消默认mock再重新定义:

jest.unmock('expo-constants');
jest.mock('expo-constants', () => ({
  expoConfig: {
    extra: {
      api: 'your-test-api-url'
    }
  }
}));

3. 代码中环境变量的读取逻辑存在兼容问题

如果你的代码需要兼容SDK46和47,建议保留兼容逻辑,但测试时需要确保mock覆盖两种情况:

// 代码中的兼容写法
const API_URL = Constants?.expoConfig?.extra?.api || Constants?.manifest?.extra?.api;

// 测试对应的Mock
jest.mock('expo-constants', () => ({
  expoConfig: {
    extra: {
      api: 'your-test-api-url'
    }
  },
  manifest: {
    extra: {
      api: 'your-test-api-url'
    }
  }
}));

4. expo-constants版本与SDK47不匹配

确保你的expo-constants版本是SDK47对应的版本(SDK47对应expo-constants@14.0.2左右),版本不匹配可能导致结构差异。可以通过以下命令更新:

npx expo install expo-constants@^14.0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:54:22