在我的应用程序中,我在其自己的文件中设置了一个全局变量。哪个在我的应用程序中工作正常,但在需要它的文件上打破了我的单元测试。
它基本上位于根级别和它自己的文件中,看起来像这样:
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 \& #34; {!,(node_modules)/ ** /} * test.js \""
(原来它没有--globals
args或MY_GLOBAL_VAR
文件的要求。
关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
我找到了问题的解决方案。摩卡不是没有认识到全局变量,而是巴贝尔。
package.json
中没有任何内容需要更改,我能够将测试脚本恢复到最初的状态。
所有必须做的就是将MY_GLOBAL_VAR.js
文件添加到ignore
文件中的.babelrc
列表中。所以基本上:
// in .babelrc
{
"plugins": [
// [...] my plugins
],
"ignore": [
"./MY_GLOBAL_VAR.js"
],
"presets": [
"@babel/preset-env"
]
}