使用命名导入的Jest测试中的“常量”

umuewwlo  于 8个月前  发布在  Jest
关注(0)|答案(3)|浏览(97)

我的项目中有一个configconstants文件夹。分别位于src\config\test.tssrc\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'的文件总是得到SOME_CONSTundefined值,而任何使用config默认导出的文件都可以正常工作。
这是一个已知的问题吗?我在这里做错了什么吗?似乎无法确定。

mcvgt66p

mcvgt66p1#

我和你有同样的问题,但我最终找到了解决这个问题的github issue。它看起来像constants是一个核心模块,因此在jest的模块Map之前进行了评估。我发现了这个对我有用的评论,并说把它放在你的测试文件中:

jest.mock('constants', () => require('path/to/your/constants'))

字符串
另一种方法是按照@dougajmcdonald在上面his comment中的建议,将你的webpack别名从constants重命名为其他名称,例如app-constants

nwsw7zdq

nwsw7zdq2#

我也遇到了同样的挑战:用babel-6设置jest
以前,我使用create-react-app(CRA)方法做了很多工作。当我遇到这个挑战时,我开始真正欣赏facebook team在提出CRA工具时所做的出色工作。
无论如何,这就是我如何应对这个挑战的方式。首先,我们需要澄清事实。

  • 接受配置这些现代JavaScript工具是一件很麻烦的事,因此要有耐心**
  • Jest 24放弃了对babel-6的支持(这是我的全部挑战,升级到babel-7会带来很多其他的变化,我想避免)
  • 关于配置jest以使其与babel-7一起工作的文档太多了,但与babel-6一起工作的文档却很少。

好吧,既然这样,我们开始吧:
1.我按照官方jest docs(24.9)的建议更新了我的密钥dependencies,以使用babel-6。

"dependencies": {
  "babel-core": "^6.26.3",
  "babel-jest": "^23.6.0",
  "babel-preset-env": "^1.7.0",
  "jest": "^24.0.0"
}

字符串
1.我去了// comment out的一些行,以确认我是否会得到一个补救措施,但唉,我得到了一个更详细的error消息从jest(至少它是很好的解释,谢谢大家)。

截图-1:注解掉import * as C from ...语句

x1c 0d1x的数据

屏幕截图-2:尽管注解掉了import常量语句,但jest仍显示错误消息。



1.最后,这成功了,经过大量的“谷歌搜索”和反复试验,我终于偶然发现了一个依赖项的工作组合。好吧,考虑到我一直在改变这些,我决定将这些保存为--devDependenciesset-upbabel-jest作为我的.js代码的Transformer,并更新了我的.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"
  ]
}

drnojrws

drnojrws3#

@mwamitovi这可能是我找到的最好的答案。我知道看到Jest <24和babel 6很奇怪,但有时你最终会处理遗留代码。(注意:我使用vue2.js)
我通过添加上面的包和es2015成功地让它工作,就像这样(jest v23.x,babel 6):
package.json:

"devDependencies": {
    "@vue/test-utils": "^1.3.0",
    "axios-mock-adapter": "^1.21.2",
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.0",
    "babel-jest": "^23.6.0",
    "babel-loader": "^7.1.2",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-plugin-transform-vue-jsx": "^3.7.0",
    "babel-preset-env": "^1.7.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-stage-2": "^6.24.1",
    "jest": "^23.6.0",
    "node-notifier": "^10.0.1",
    "vue-jest": "^3.0.7",
    "webpack": "^3.12.0",
}

字符串
jest.config.js:
模块.exports = {“verbose”:true,“testEnvironment”:“jsdom”,“moduleFileExtensions”:[“js”,“json”,“vue”],“testMatch”:[“**/tests/*. test.(js| JSX| ts| txx)”],“transform”:{“..(vue)$":“/node_modules/vue-jest”,“..(js)$":“/node_modules/babel-jest”},“testURL”:“http://localhost/",“transformIgnorePatterns”:[“node_modules/(?!(p-retry)/)",] }
在你的.babelrc
“env”:{“test”:{“”:[“env”,{“modules”:alse,“targets”:{“browsers”:["> 1%",“last 2 ersions”,“not ie <= 8”]} }],“stage-2”,“es2015”## this is key ],“plugins”:[“transform-vue-jsx”,“transform-runtime”] }

相关问题