运行 测试时 Mocha 无法识别全局变量

Mocha not recognizing a global variable when running tests

在我的应用程序中,我在它自己的文件中设置了一个全局变量。这在我的应用程序中运行良好,但破坏了我对需要它的文件的单元测试。

它基本上位于根级别并在它自己的文件中,看起来像这样:

global.MY_GLOBAL_VAR = require('my-global-var').MY_GLOBAL_VAR

稍后将其导入到我需要测试的文件中,并且如前所述,在 运行 正常运行应用程序时工作正常。所以它看起来像这样:

// doSomething.js
require('MY_GLOBAL_VAR')

module.exports = function doSomething () {
// do stuff
}

因此,当我尝试为 doSomething.js 编写单元测试时,出现以下错误:

    1) "before all" hook
    GET /
     { TypeError: MY_GLOBAL_VAR is not a constructor

当我对其执行 console.log 时,它的值返回为 undefined。 有趣的是,如果我 运行 node doSomethingMY_GLOBAL_VAR 是预期的(这是一个函数)。

我试图修改一下我原来的测试命令,但无济于事。这是它目前的样子:

"test": "mocha ---globals MY_GLOBAL_VAR -require @babel/register --require dotenv/config --require ./MY_GLOBAL_VAR.js --watch-extensions js \"{,!(node_modules)/**/}*.test.js\""

(最初它没有 --globals 参数或 MY_GLOBAL_VAR 文件的要求。

知道如何解决这个问题吗?

我已经找到问题的解决方案。不是mocha不识别全局变量,而是babel。

package.json 中无需更改任何内容,我能够将我的测试脚本恢复到原来的状态。

所要做的就是将 MY_GLOBAL_VAR.js 文件添加到我的 .babelrc 文件中的 ignore 列表中。所以基本上:

// in .babelrc
{
  "plugins": [
     // [...] my plugins
  ],
  "ignore": [
    "./MY_GLOBAL_VAR.js"
  ],
  "presets": [
    "@babel/preset-env"
  ]
}