【问题标题】:How does require in node.js deal with globals?node.js 中的 require 如何处理全局变量?
【发布时间】:2012-11-05 06:42:48
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: unit-testing node.js require


    【解决方案1】:

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

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

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

    不确定我是否关注这里。如果对象被隐藏,那么您将无法覆盖它。您可以覆盖任何可用的对象,可以是全局对象(例如控制台),也可以是运行时可用的任何对象的属性(例如 console.log)。

    【讨论】:

    • 好吧,如果我这样做passwordhelper_mock = require("helpers/password"),后面的 sutbbed 模拟将不会被使用。但是,执行global.passwordhelper_mock 将允许我修改属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2015-05-13
    • 2015-01-16
    • 2011-07-23
    相关资源
    最近更新 更多