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()