在模拟 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家.相反,它是一个更传统的模拟框架.用赝品替换指定的方法,或者创建一个模拟来跟踪调用它的时间.

Node.js相关问答推荐

已知NPM无法在node.js V12上运行的问题

Node.js分页返回空数组

对于具有重叠列的组合键,在冲突&q;上没有唯一或排除约束匹配错误

获取驱动器文件夹的直接子文件夹时出现问题

如何在Mongoose for MongoDB中编写此查询

如何发送比特币BTC使用发送加密使用WIF密钥在 node ,js

无法从 mongoDB 访问数据?

如何设置 Puppeteer Select 器的唯一性?

使用更新版本仍然找到包@angular/fire但不支持原理图

Amplify 部署的应用程序出现TypeError: handler is not a function错误,但它在本地运行

当try 将 formData 转换为 express js 时,服务器无法识别 multipart/form-data

如何为单个 mongo nodejs 驱动程序找到最佳连接池大小

使用 node/express/Multer,您如何首先判断参数?

即使部署成功,也不会触发 Firebase 函数来填充 Firestore 集合.为什么?

提供静态文件到底是什么意思?

Node.js、Cygwin 和 Socket.io 走进一家wine 吧……Node.js 抛出 ENOBUFS,所有人都死了

Nodejs 随机免费 tcp 端口

使用 ES6 语法和动态路径导入模块

如何在 MongoDB 上只收听 localhost

Puppeteer:如何提交表单?