2012-11-16 28 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