如何检测是否在node.js中运行摩卡testing?

我想确保在代码以testing模式运行的情况下,它不会(意外)访问错误的数据库。 检测代码当前是否在testing模式下运行的最佳方法是什么?

正如已经在评论中提到的那样,构build代码意识到testing是不好的做法。 甚至在外面甚至都找不到提到的话题。 但是,我可以想办法来检测在testing中启动的事实。 对我来说,摩卡不会把自己添加到global范围,但增加global.it 。 所以你的支票可能是

 var isInTest = typeof global.it === 'function'; 

我build议您确保不要错误地检测到您最有可能在您的node.jstesting中使用的global.sinonglobal.chai

根据我的经验,检查process.argv是一个很好的方法。

例如,如果我在testingconsole.log(process.argv) ,我得到以下内容:

 [ 'node', '/usr/local/bin/gulp', 'test', '--file', 'getSSAI.test.unit.js', '--bail', '--watch' ] 

从中你可以看到,吞咽正在使用。 使用yargs使解释变得简单很多。

我非常赞同Kirill,一般来说代码不应该意识到它正在被testing的事实(在你的情况下,也许你可以通过一个构造函数传递你的数据库绑定/连接?),像日志logging我可以看到为什么你可能想要检测到这一点。