在模拟 Node 依赖项时,我偶然发现了以下库:
- 代理查询 https://github.com/thlorenz/proxyquire
- Rewire https://github.com/jhnns/rewire
- 沙盒模块 https://github.com/felixge/node-sandboxed-module
- Sinon http://sinonjs.org/
他们似乎都做或多或少相同的事情:允许你嘲笑require()
调用(除了Sinon,它模拟了几乎所有的东西)。它们似乎都需要一些非常复杂的设置,注意传递给的字符串的确切语法require
——重构期间不太好。
每个图书馆的优缺点是什么?我什么时候会选择其中之一而不是另一个?每个库擅长的示例用例是什么?这个领域还有哪些更好的产品?
这完全感觉像是作弊,但由于没有其他人回答这个问题,所以这里是:
Proxyquire 接管require
并允许您在依赖链中的任何位置注入伪造品。为了require
您不接管以及您未定义的方法require
如果你确实接管了,它就会回到原来的状态。可以通过以下方式禁用此功能noCallThru
。因此它仍然加载原始内容,只是用您定义的内容替换内容。与 Rewire 和 SandboxedModule 不同,您不能为您的require
过载。
重新布线接管require
并注入__get__
and __set__
属性到每个模块中。如果您知道私有变量名称,则可以替换它。想想依赖注入。
SandboxedModule 与 Proxyquire 几乎相同,只是它在新的 V8 虚拟机中运行整个流程。 (这种方法会产生每次测试的性能成本。)它在 1.0 版中还存在一个令人讨厌的错误,当您未替换的内容引用它不支持的本机模块时,该错误会使其失败。看https://github.com/robrich/sandboxed-module-graceful-fs https://github.com/robrich/sandboxed-module-graceful-fs.
诗乃不接手require
与其他 3 一样。相反,它是一个更传统的模拟框架。用伪造的方法替换指定的方法,或者创建一个模拟来跟踪它的调用时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)