Javascript 无法读取属性';默认值';使用Jest测试时未定义的反应本机向量图标的数量

Javascript 无法读取属性';默认值';使用Jest测试时未定义的反应本机向量图标的数量,javascript,react-native,jestjs,Javascript,React Native,Jestjs,我在使用Jest的单元测试中运行react native vector icons包时遇到了一个问题 错误: TypeError:无法读取未定义的属性“default” 14 |测试(“第二步寄存器正确渲染”,()=>{ 15 |/@ts忽略 >16 | const wrapper=mount() | ^ 17 | wrapper.render() 18 | 19 | expect(wrapper.find(SafeAreaView)).toExist(

我在使用
Jest
的单元测试中运行
react native vector icons
包时遇到了一个问题

错误:

TypeError:无法读取未定义的属性“default”
14 |测试(“第二步寄存器正确渲染”,()=>{
15 |/@ts忽略
>16 | const wrapper=mount()
|                     ^
17 | wrapper.render()
18 | 
19 | expect(wrapper.find(SafeAreaView)).toExist()
在新图标处(node_modules/react native vector icons/lib/create Icon set.js:42:399)
在constructClassInstance(node_modules/react dom/cjs/react dom.development.js:11361:18)
在updateClassComponent(node_modules/react dom/cjs/react dom.development.js:14687:5)
开始工作时(node_modules/react-dom/cjs/react-dom.development.js:15644:16)
首先,我将react-native与
ignite bowser
模板一起使用,该模板将typescript用于react-native。ref:

下面是my
Jest
配置:Jest预设点火开关
preset:

module.exports={
预设:“玩笑预设点火”,
转换信号模式:[
“/node_modules/(?!(jest-)?反应本机|反应本机|反应导航|@react导航|@storybook |@react本机社区|@expo)”
],
SetupFileAfterEnv:[
“/test/setup.ts”
],
模块映射:{
“^lodash es$”:“lodash”
}
};
我试图模仿
反应本机向量图标
包,如下所示:

jest.mock(“反应本机向量图标”)
但是没有结果


我错过了什么吗?

我通过修改jest预处理器找到了答案

从本机问题:

创建一个包含jest预处理器代码的文件(例如:jest preprocessor.js):

/**
*您自己的[临时?]转换为React Native
*/
const generate=require(“@babel/generator”)。默认值
const transformer=require('metro-react-native-babel-transformer')
const createCacheKeyFunction=require('fbjs-scripts/jest/createCacheKeyFunction')
常量metroBabelRegister=require('metro-babel-register')
metroBabelRegister([]))
module.exports={
进程(src,文件){
const{ast}=transformer.transform({
文件名:file,
选项:{
是的,
戴夫:没错,
enableBabelRuntime:false,
支持:false,
热:错,
内部要求:错误,
缩小:错误,
平台:“”,
projectRoot:“”,
保留行:对,
sourceType:'明确',
},
src,
插件:metroBabelRegister.config.plugins,
})
返回生成(
ast,
{
代码:对,
评论:错,
紧凑型:错误,
文件名:file,
保留行:对,
sourceFileName:file,
sourceMaps:对,
},
src,
).代码
},
getCacheKey:createCacheKeyFunction([
__文件名,
require.resolve('metro-react-native-babel-transformer'),
require.resolve(“@babel/core/package.json”),
]),
}
添加到您的
Jest
配置中:

转换:{
“^.+\.js$”:“/jest preprocessor.js”,
},

参考资料:

我通过修改jest预处理器找到了答案

从本机问题:

创建一个包含jest预处理器代码的文件(例如:jest preprocessor.js):

/**
*您自己的[临时?]转换为React Native
*/
const generate=require(“@babel/generator”)。默认值
const transformer=require('metro-react-native-babel-transformer')
const createCacheKeyFunction=require('fbjs-scripts/jest/createCacheKeyFunction')
常量metroBabelRegister=require('metro-babel-register')
metroBabelRegister([]))
module.exports={
进程(src,文件){
const{ast}=transformer.transform({
文件名:file,
选项:{
是的,
戴夫:没错,
enableBabelRuntime:false,
支持:false,
热:错,
内部要求:错误,
缩小:错误,
平台:“”,
projectRoot:“”,
保留行:对,
sourceType:'明确',
},
src,
插件:metroBabelRegister.config.plugins,
})
返回生成(
ast,
{
代码:对,
评论:错,
紧凑型:错误,
文件名:file,
保留行:对,
sourceFileName:file,
sourceMaps:对,
},
src,
).代码
},
getCacheKey:createCacheKeyFunction([
__文件名,
require.resolve('metro-react-native-babel-transformer'),
require.resolve(“@babel/core/package.json”),
]),
}
添加到您的
Jest
配置中:

转换:{
“^.+\.js$”:“/jest preprocessor.js”,
},
参考: