Javascript Mocha在运行测试时未识别全局变量

Javascript Mocha在运行测试时未识别全局变量,javascript,unit-testing,mocha.js,Javascript,Unit Testing,Mocha.js,在我的应用程序中,我在它自己的文件中设置了一个全局变量。这在我的应用程序中运行良好,但破坏了我对需要它的文件的单元测试 它基本上位于根级别,并且位于它自己的文件中,如下所示: global.MY_GLOBAL_VAR = require('my-global-var').MY_GLOBAL_VAR // doSomething.js require('MY_GLOBAL_VAR') module.exports = function doSomething () { // do stuff

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

它基本上位于根级别,并且位于它自己的文件中,如下所示:

global.MY_GLOBAL_VAR = require('my-global-var').MY_GLOBAL_VAR
// doSomething.js
require('MY_GLOBAL_VAR')

module.exports = function doSomething () {
// do stuff
}
这是后来导入到我的文件,需要进行测试,如前所述,正常运行应用程序时工作正常。所以它看起来像这样:

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时,它的值返回为
未定义
。 有趣的是,如果我运行
node doSomething
,那么
MY_GLOBAL_VAR
与预期一样(这是一个函数)

我试图修改一下我原来的test命令,但是没有用。这就是它目前的样子:

“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
args或
MY\u GLOBAL\u VAR
文件的要求


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

我找到了解决问题的方法。不是摩卡不认识全局变量,而是巴贝尔

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

所要做的就是将
MY_GLOBAL\u VAR.js
文件添加到MY
.babelrc
文件中的
ignore
列表中。因此基本上:

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

我的意思是,简单的答案是,“这是全局变量不受欢迎的一个原因”。错误消息表明
MY\u global\u VAR
可以识别,但不是构造函数。你说它是一个函数,这意味着你的问题听起来像你的代码中有
新的MY\u global\u VAR()
,而它应该是
MY\u global\u VAR()