2012-11-16 29 views
0

我发现,如果我需要一个模块,并将其存储为一个全球性的,我可以覆盖模块中的方法和属性,如下图所示:node.js中的require如何处理全局变量?

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

如果我再需要它本身利用其他模块上面的stubbed方法,我的stubbed版本将被使用。

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

感谢

回答

0

怎样的要求Node.js的功能会注意到这些全局?

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

为什么只有当我覆盖/存根已保存为全局的模块时才起作用?

不确定我在这里。如果对象被隐藏,那么你不能覆盖它。您可以覆盖可用的任何对象,包括全局对象(例如控制台)或运行时可用的任何对象的属性(例如console.log)。

+0

那么,如果我做'passwordhelper_mock = require(“助手/密码”)',那么后面的sutbbed模拟将不会被使用。然而,执行'global.passwordhelper_mock'将允许我修改属性 – Industrial