我的项目中有一个config
和constants
文件夹。分别位于src\config\test.ts
和src\constants\index.js
中。
我将Jest设置为使用moduleNameMapper
如下,因此我可以只进行import config from 'config'
和import { SOME_CONST } from 'constants'
"moduleNameMapper": {
"config$": "<rootDir>/src/config/test.js",
"constants$": "<rootDir>/src/constants/index.js"
}
但是,在我的测试中,使用import { SOME_CONST } from 'constants'
的任何文件始终会为undefined
获得SOME_CONST
的值,而我们默认从config
导出的文件都可以正常工作。
这是一个已知问题吗?我在这里做错什么了吗?似乎无法将其固定下来。
答案 0 :(得分:0)
我遇到了与您相同的问题,但最终找到了解决这个问题的github issue。看来constants
是核心模块,因此在进行jest的模块映射之前先进行评估。我发现this comment对我有用,并说要把它放在您的测试文件中:
jest.mock('constants', () => require('path/to/your/constants'))
一种替代方法是执行上面his comment中@dougajmcdonald所建议的操作,并将您的Webpack别名从constants
重命名为其他名称,例如app-constants
。
答案 1 :(得分:0)
我也遇到了同样的挑战:用
jest
设置babel-6
。
以前,我在create-react-app
(CRA)方法方面做了很多工作。当我遇到这个挑战时,我深深地开始真正欣赏facebook team在提出CRA工具方面所做的出色工作。
无论如何,这就是我如何应对这一挑战的方式。 首先,我们需要保持记录整齐。
好的,让我们开始吧:
dependencies
以便与babel-6一起使用。并且undefined
在运行测试时仍然存在错误。"dependencies": {
"babel-core": "^6.26.3",
"babel-jest": "^23.6.0",
"babel-preset-env": "^1.7.0",
"jest": "^24.0.0"
}
// comment out
行以确认我是否可以采取补救措施,但是可惜我从玩笑中得到了更详细的error
信息(至少,这是很好的解释,谢谢大家)。 屏幕截图1 :已注释掉
import * as C from ...
声明
屏幕截图2 :尽管注释了
jest
常量语句,但来自import
的错误消息。
--devDependencies
,set-up babel-jest
作为我的.js
代码的转换器,并更新了.babelrc
babel配置文件。// 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"
]
}