在模拟 node 依赖关系时,我遇到了以下库:
它们似乎都做了或多或少相同的事情:允许你模拟require()
个电话(Sinon除外,它几乎模拟所有电话).它们似乎都需要一些非常复杂的设置,注意传递给require
的字符串的确切语法——在重构过程中不是很好.
每个图书馆的优点和缺点是什么?什么时候我会 Select 一个而不是另一个?每个库都有哪些优秀的示例用例?这个领域还有哪些更好的产品?
在模拟 node 依赖关系时,我遇到了以下库:
它们似乎都做了或多或少相同的事情:允许你模拟require()
个电话(Sinon除外,它几乎模拟所有电话).它们似乎都需要一些非常复杂的设置,注意传递给require
的字符串的确切语法——在重构过程中不是很好.
每个图书馆的优点和缺点是什么?什么时候我会 Select 一个而不是另一个?每个库都有哪些优秀的示例用例?这个领域还有哪些更好的产品?
这完全像是作弊,但既然没有其他人回答这个问题,下面是:
Proxyquire拥有require
多个功能,可以在依赖链中的任何位置注入赝品.对于require
年代,你没有接管,对于你没有为require
年代定义的方法,你确实接管了,它会回到最初的状态.这可以用noCallThru
禁用.因此,它仍然加载原始内容,只是用您定义的内容替换内容.与Rewire和SandboxedModule不同,您不能为require
个重载定义全局变量.
Rewire接管require
个模块,并向每个模块中注入__get__
和__set__
个属性.如果知道私有变量名,可以替换它.想想依赖注入.
SandboxedModule与Proxyquire几乎相同,只是它在新的V8虚拟机中运行整个过程.(这种方法会导致每次测试的性能成本.)它在V1.0中还有一个严重的错误,当你没有替换的东西引用了它不支持的本机模块时,它就会失败.见https://github.com/robrich/sandboxed-module-graceful-fs.
西农不像其他三家那样超过require
家.相反,它是一个更传统的模拟框架.用赝品替换指定的方法,或者创建一个模拟来跟踪调用它的时间.