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"
      ]
    }