【问题标题】:How to stub "global" module variables in node.js with Coffeescript without --bare?如何在没有--bare的情况下使用Coffeescript在node.js中存根“全局”模块变量?
【发布时间】:2013-02-08 02:53:15
【问题描述】:

我有一些来自 Heroku 的环境变量,为了可读性,我倾向于将它们分配给全局变量以提高可读性:

ACCESS_TOKEN = process.env.ACCESS_TOKEN

现在我想在测试中更改它的值。我试过rewiresandboxed-module。但是,它们都是直接设置全局变量,而coffeescript变量are wrapped in anonymous function

有什么办法可以解决这个问题,或者如果我想测试我的代码,我真的必须使用--bare吗?

【问题讨论】:

    标签: node.js testing mocking coffeescript stubbing


    【解决方案1】:

    我不熟悉节点,但我使用的方法以及我在其他技术中使用的方法是将全局变量或外部依赖项包装在一个对象中,当这些对象可以被替换为存根或模拟对象时测试中需要。

    假设你创建了一个 herokuEnvironment 对象,而不是将值存储在 ACCESS_TOKEN 中,并为它提供了方法 accessToken()。无论您需要在哪里使用注入对象的属性。然后在生产中该方法调用 process.env.ACCESS_TOKEN。如果您需要一个安全版本来注入测试情况,您只需提供 { accessToken: function () {return 'foo';}}

    【讨论】:

    • 这在功能上等同于访问 process.env,只有额外的抽象层......它并没有解决我的问题,这更多的是关于可读性:我发现注释“全局”是可读的config”变量,现在由于测试我不能这样做。每当我因为测试而瘫痪我的资源时,我都在四处寻找。
    • 所以你把东西放在全局变量中以提高可读性,但是你测试使用它的对象的努力受到了结果耦合的阻碍?我建议找到一种在不增加耦合的情况下增加可读性的方法。
    • 是的。在谈论配置常量时,我​​看不出它们被缓存到全局(为了可读性)有什么问题。耦合只会损害它的测试,我选择复杂的测试......但看起来没有办法,所以我想我必须按照你说的做:]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2019-07-14
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多