node.js中的require如何处理全局变量?

时间:2012-11-16 14:12:36

标签: unit-testing node.js require

我刚刚发现,如果我需要一个模块并将其存储为全局模块,我可以覆盖模块中的方法和属性,如下所示:

global.passwordhelper_mock = require("helpers/password")
sinon.stub(passwordhelper_mock, "checkPassword").returns true

如果我需要另一个本身使用上述存根方法的模块,我将使用我的存根版本。

node.js中的require函数如何注意这些全局变量?为什么它只在我覆盖/存根已保存为全局的模块时才有效?

由于

1 个答案:

答案 0 :(得分:0)

  

node.js中的require函数如何注意这些全局变量?

模块内的某处必须调用module.exports.someObject = function(x){...},以便someObject可以全局使用。

  

为什么它只在我覆盖/存根已保存为全局的模块时才有效?

不确定我是否跟随此处。如果对象被隐藏,那么你无法覆盖它。您可以覆盖任何可用的对象,全局对象(例如控制台)或运行时可用的任何对象的属性(例如console.log)。