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

时间:2018-06-04 18:56:16

标签: javascript unit-testing mocha

在我的应用程序中,我在其自己的文件中设置了一个全局变量。哪个在我的应用程序中工作正常,但在需要它的文件上打破了我的单元测试。

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

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 \& #34; {!,(node_modules)/ ** /} * test.js \""

(原来它没有--globals args或MY_GLOBAL_VAR文件的要求。

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

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

package.json中没有任何内容需要更改,我能够将测试脚本恢复到最初的状态。

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

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