VS Code配置Jest测试工具运行时报options.instrument解构TypeError错误
该报错是fbjs-scripts包与≥27.x版本的Jest存在API兼容性问题导致的。Jest 27及以上版本重构了转换器传入的参数结构,而旧版fbjs-scripts中的createCacheKeyFunction.js仍在尝试读取旧版参数结构中的options.instrument属性,该属性在新版参数中已不存在,因此触发解构失败报错。
方案1:降级Jest到兼容版本
将所有Jest相关依赖降级到26.x版本,执行以下安装命令:npm install jest@26 babel-jest@26 @types/jest@26 --save-dev安装完成后删除项目下的
node_modules文件夹、package-lock.json或yarn.lock文件,重新执行依赖安装命令即可。方案2:移除fbjs-scripts相关依赖(更推荐)
若项目无强制依赖fbjs-scripts的自定义转换器配置,可以直接卸载fbjs-scripts包,同时修改jest.config.js中的transform配置,移除引用fbjs-scripts的规则,使用默认的babel-jest或ts-jest即可,示例配置如下:module.exports = { transform: { "^.+\\.(js|jsx|ts|tsx)$": "babel-jest" } }方案3:临时修复fbjs-scripts源码(仅临时验证使用)
找到node_modules/fbjs-scripts/jest/createCacheKeyFunction.js文件的第35行,将原解构代码修改为兼容写法:// 原代码:const { instrument } = options; // 修改为: const instrument = options?.instrument ?? false;该修改仅临时生效,重新安装依赖后会被覆盖,不建议作为长期解决方案使用。
修改配置后可以执行
npx jest --clearCache清除Jest缓存,再重新运行测试,避免缓存导致问题复现。
内容的提问来源于stack exchange,提问作者Bad Coder

