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
相关产品推荐
相关产品推荐

