Testing 使用命名导入在Jest测试中导入“常量”
我的项目中有一个Testing 使用命名导入在Jest测试中导入“常量”,testing,jestjs,jsdom,Testing,Jestjs,Jsdom,我的项目中有一个config和constants文件夹。分别位于src\config\test.ts和src\constants\index.js中 我已经设置了Jest来使用下面的moduleNameMapper,这样我就可以从'config'导入配置了 "moduleNameMapper": { "config$": "<rootDir>/src/config/test.js", "constants$": "<rootDir>/src/constants/i
config
和constants
文件夹。分别位于src\config\test.ts
和src\constants\index.js
中
我已经设置了Jest来使用下面的moduleNameMapper
,这样我就可以从'config'导入配置了
"moduleNameMapper": {
"config$": "<rootDir>/src/config/test.js",
"constants$": "<rootDir>/src/constants/index.js"
}
“moduleNameMapper”:{
“config$”:“/src/config/test.js”,
“常量$:”/src/constants/index.js”
}
然而,在我的测试中,任何使用从“常量”
导入{SOME_CONST}的文件总是为SOME_CONST
获取一个未定义的值,而使用配置的默认导出的任何文件都可以正常工作
这是一个已知的问题吗?我做错什么了吗?似乎无法确定。我和你有同样的问题,但我最终找到了解决这个问题的方法。看起来,常量
是一个核心模块,因此在jest的模块映射之前进行评估。我找到了对我有效的方法,并说把它放在你的测试文件中:
jest.mock('constants', () => require('path/to/your/constants'))
另一种方法是按照上面@dougajmcdonald的建议,将您的网页别名从常量
重命名为其他名称,例如应用常量
我也遇到了同样的挑战:用babel-6
设置jest
在此之前,我曾多次使用createreact-app
(CRA)方法。当我遇到这个挑战时,内心深处我开始真正地欣赏CRA工具所做的了不起的工作
无论如何,这就是我如何应对这一挑战的方法。
首先,我们需要澄清事实
- 接受配置这些现代JavaScript工具是一件急事,因此要耐心
- 放弃了对巴别塔-6的支持(这是我的全部挑战,升级到巴别塔-7会带来很多我想避免的其他变化)
- 有太多关于配置以使用的文档,但关于babel-6的文档却很少
好了,现在让我们开始:
我更新了我的密钥依赖项
,这是为了配合babel-6。运行测试时,未定义
的错误仍然存在
我继续评论了几行,以确认我是否能得到补救,但遗憾的是,我从jest那里得到了一条更详细的错误
消息(至少解释得很好,谢谢大家)李>
屏幕截图-1:注释掉import*as C from…
语句
屏幕截图-2:来自jest
的错误消息,尽管注释掉了import
constants语句
最后,这起作用了,经过大量的“谷歌搜索”加上反复尝试,我终于发现了一个有效的依赖组合。考虑到我一直在更改这些,我决定将它们保存为--devdependency
,babel jest
作为我的.js
代码的转换器,并更新了我的.babelrc
babel配置文件
你找到解决办法了吗?我也面临同样的问题。@Subwendukundu我没有找到一个完美的解决方案,但找到了一个解决办法。看来,常量
是某种保留导入。我在文件和模块映射中都更改为appconstants
,现在一切正常。
"dependencies": {
"babel-core": "^6.26.3",
"babel-jest": "^23.6.0",
"babel-preset-env": "^1.7.0",
"jest": "^24.0.0"
}
// package.json
"devDependencies": {
"babel-core": "6.26.0",
"babel-jest": "21.2.0",
"babel-loader": "7.1.2",
"babel-preset-env": "1.6.0",
"babel-preset-react": "6.24.1",
"babel-preset-stage-0": "6.24.1",
"jest": "21.2.1",
"webpack": "3.6.0"
},
"jest": {
"transform": {
"^.+\\.jsx?$": "babel-jest"
}
}
// .babelrc
{
"presets": [
"env",
"stage-0",
"react"
]
}