在模拟节点依赖关系时,我遇到了以下库:
它们似乎都做了或多或少相同的事情:允许您模拟require()
调用(Sinon除外,它模拟了几乎所有的东西)。它们似乎都需要一些非常复杂的设置,注意传递给require
的字符串的确切语法--在重构期间不太好。
每个图书馆的利弊是什么?我什么时候会选择一个而不是另一个?每个库都擅长的示例用例是什么?这个空间还有哪些产品比较好?
这完全感觉像是作弊,但既然没有人回答这个问题,下面是:
>
ProxyQuire接管require
并允许您在依赖链中的任何位置注入假象。对于require
,如果您没有接管,对于您没有为require
定义的方法,如果您接管,它将返回到原始方法。可以使用nocallthru
禁用此功能。因此,它仍然加载原始的,只是用你定义的东西替换东西。与Rewire和SandboxedModule不同,您不能为require
重载定义全局变量。
Rewire接管require
并将__get__
和__set__
属性注入每个模块。如果知道私有变量名,就可以替换它。想想依赖注入。
SandboxedModule与Proxyquire几乎相同,只是它在一个新的V8虚拟机中运行整个进程。(这种方法有一个每次测试的性能成本。)它在V1.0中还有一个严重的bug,当您没有替换的东西引用它不支持的本机模块时,它就会失败。请参阅https://github.com/robrich/sandboxed-module-graceful-fs。
Sinon不像其他3个那样接管require
。相反,这是一个更传统的嘲讽框架。用fake替换指定的方法,或者创建一个mock来跟踪它被调用的时间。