Detox测试运行失败:无法读取undefined的testEnvironmentOptions属性
Detox测试运行报错
Cannot read properties of undefined (reading 'testEnvironmentOptions') 修复方案 核心原因
该报错触发于Jest初始化测试环境阶段,本质是jest-environment-node构造函数未收到完整的入参,90%以上的场景由两类问题导致:
- 项目内存在多版本Jest依赖冲突
- 自定义Detox测试环境类的构造函数传参不兼容新版Jest规范
分步修复
- 对齐全项目Jest相关依赖版本
Detox对Jest版本一致性要求极高,只要项目内存在两个不同小版本的Jest相关包,就会触发上下文传参丢失的问题。
先执行命令排查依赖树中的Jest版本:
如果输出结果中出现多个不一致的版本号,直接删除对应包管理工具的lock文件、# npm用户 npm ls jest jest-circus jest-environment-node # yarn用户 yarn list jest jest-circus jest-environment-node # pnpm用户 pnpm ls jest jest-circus jest-environment-nodenode_modules目录,重新执行依赖安装即可强制版本对齐。如果是Monorepo项目,必须保证根目录与e2e测试目录下的Jest版本完全统一,禁止在e2e目录单独安装一套独立版本的Jest。 - 修正自定义Detox环境类的构造函数写法
报错栈中明确指向了CustomDetoxEnvironment,最常见的问题是旧版Detox教程里的单参数构造函数写法不兼容Jest 28+版本的签名要求。
找到e2e目录下的environment.js文件,检查构造函数逻辑:
错误写法(仅传config参数,新版Jest不兼容)
正确写法(同时传入config和context两个参数)class CustomDetoxEnvironment extends DetoxCircusEnvironment { constructor(config) { super(config); this.initTimeout = 300000; // 其余自定义逻辑 } }
Jest 28版本之后调整了测试环境类的构造函数签名,必须同时传入配置对象和上下文对象,缺省context参数就会导致父类class CustomDetoxEnvironment extends DetoxCircusEnvironment { constructor(config, context) { super(config, context); this.initTimeout = 300000; this.registerListeners({ // 你的监听器配置 }); } }jest-environment-node读取testEnvironmentOptions时报空指针。 - 独立配置e2e测试的Jest配置文件
打开报错命令中提到的e2e/config.json,确保e2e测试的Jest配置完全独立,不要继承根目录下用于单元测试的Jest配置,尤其不要引入jest-expo等单元测试预设(这类预设会强制绑定jsdom测试环境和自带的Jest版本,和Detox依赖的node环境冲突)。
Detox 20+版本可用的最小配置参考:{ "testRunner": "jest-circus/runner", "testEnvironment": "./environment.js", "testTimeout": 120000, "testMatch": ["**/*.e2e.js"] } - 清缓存验证修复结果
完成上述修改后,先清空Jest缓存再重新运行测试:npx jest --clearCache npx detox test -c 你的测试配置名
内容的提问来源于stack exchange,提问作者Thomas Mikhail
相关产品推荐
相关产品推荐

