运行 测试时 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 doSomething
,MY_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"
]
}
在我的应用程序中,我在它自己的文件中设置了一个全局变量。这在我的应用程序中运行良好,但破坏了我对需要它的文件的单元测试。
它基本上位于根级别并在它自己的文件中,看起来像这样:
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 doSomething
,MY_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"
]
}