您的问题不是Sinon是否支持这一点,而是您对Ecmascript中“类”的工作方式缺少了解,如尝试在constructor
测试代码中对属性进行存根显示。这将永远不会起作用,因为该属性与结果对象的结果无关。它只是对用于创建对象的函数的引用。我在Sinon跟踪器上涵盖了一个非常相似的主题,您可能有兴趣阅读以获取一些核心JS foo :-)基本上,无法对构造函数进行存根,但是您可以强迫您的代码使用另一个构造函数通过DI或链接接缝代替它。
事实上,在同一线程中有一些答案,您将看到我涵盖了一个示例,说明我本人如何设计类使用支持通过依赖注入轻松测试的Redis。您可能想将其检出,因为它或多或少直接适用于上述示例模块。
您已经尝试使用的另一种技术是使用 链接缝 (使用rewire
)。Sinon主页上有一篇不错的文章。双方rewire
并proxyquire
会就好在这里做的工作:我觉得你刚才通过包装要求声明以模拟复杂的事情了一下。
即使我是Sinon维护团队的成员,我也从未使用过该mock
功能,因此我无法告诉您如何使用该功能,因为我认为它使测试变得晦涩难懂,但是要使基本的链接接缝正常工作,rewire
我基本上会删除所有Sinon首先编写代码,然后进行基本的案例研究(删除redis
已创建的存根模块)。