【问题标题】:Importing `constants` in Jest tests with named imports使用命名导入在 Je​​st 测试中导入“常量”
【发布时间】:2019-10-20 00:49:39
【问题描述】:

我的项目中有一个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_CONST 获得undefined 值,而我们默认从config 导出的任何文件都可以正常工作。

这是一个已知问题吗?我在这里做错了吗?似乎无法确定。

【问题讨论】:

  • 您找到解决方案了吗?我也面临同样的问题。
  • @SubhenduKundu 我没有找到完美的解决方案,但确实找到了解决方法。 constants 似乎是某种保留的导入。我在文件和moduleNameMapper 中都更改为appconstants,现在一切正常。

标签: testing jestjs jsdom


【解决方案1】:

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

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

另一种方法是执行上面his comment 中@dougajmcdonald 建议的操作,并将您的webpack 别名从constants 重命名为其他名称,例如app-constants.

【讨论】:

    【解决方案2】:

    我也遇到了同样的挑战:设置 jestbabel-6

    以前,我使用create-react-app (CRA) 方法做了很多工作。当我遇到这个挑战时,我内心深处开始真正欣赏facebook team 在提出 CRA 工具方面所做的出色工作。

    无论如何,这就是我应对这一挑战的方式。 首先,我们需要澄清事实。

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

    好的,不碍事,让我们开始吧:

    1. 我按照official jest docs (24.9) 的建议更新了我的密钥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"
    }
    
    1. 我继续向// comment out 确认我是否会得到补救,但可惜我从 jest 那里得到了更详细的error 消息(至少它得到了很好的解释,谢谢大家)。

    Screenshot-1:注释掉 import * as C from ... 声明

    Screenshot-2:尽管注释掉了 import 常量语句,但来自 jest 的错误消息。

    1. 最后,这行得通,经过大量的“谷歌搜索”以及反复试验,我终于偶然发现了一个有效的依赖组合。好吧,鉴于我一直在更改这些,我决定将它们保存为 --devDependenciesset-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"
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 2018-09-23
      • 2017-11-03
      • 1970-01-01
      • 2019-06-16
      • 2016-12-03
      相关资源
      最近更新 更多