当前位置: 首页 > 知识库问答 >
问题:

Proxyquire、rewire、SandboxedModule和Sinon:优缺点

齐思淼
2023-03-14

在模拟节点依赖关系时,我遇到了以下库:

  • 代理
  • 重新布线
  • 沙盒模块
  • 锡农

它们似乎都做了或多或少相同的事情:允许您模拟require()调用(Sinon除外,它模拟了几乎所有的东西)。它们似乎都需要一些非常复杂的设置,注意传递给require的字符串的确切语法--在重构期间不太好。

每个图书馆的利弊是什么?我什么时候会选择一个而不是另一个?每个库都擅长的示例用例是什么?这个空间还有哪些产品比较好?

共有1个答案

段成益
2023-03-14

这完全感觉像是作弊,但既然没有人回答这个问题,下面是:

>

  • 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来跟踪它被调用的时间。

  •  类似资料:
    • 主要内容:Tableau的优点,Tableau的缺点Tableau的优点 Tableau的优点如下 - 数据可视化: Tableau是一种数据可视化工具,提供复杂的计算,数据混合和仪表板,用于创建漂亮的数据可视化。 快速创建交互式可视化: 用户可以使用Tableau的拖放功能创建非常交互式的可视化。 实施舒适: Tableau中提供了许多类型的可视化选项,可增强用户体验。与Python相比,Tableau非常容易学习。对编码不了解的用户也可以快速学

    • 本文向大家介绍ant-design优点和缺点?相关面试题,主要包含被问及ant-design优点和缺点?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 优点:组件非常全面,样式效果也都比较不错。 缺点:框架自定义程度低,默认UI风格修改困难。

    • 问题内容: Hibernate和EJB3相对于彼此的优缺点是什么? 我找到了这篇文章,但并没有真正解决我的问题。如果我对这两种技术没有任何特别的联系,那是什么导致我选择一项而不是另一项呢?还是在某些情况下我想同时使用两者? 谢谢 编辑:回应评论:我对EJB3不太了解。 我只是想了解它是否对我的公司可行。如果EJB3与Hibernate不兼容,请解释原因。 问题答案: JPA提供了Hibernate

    • 主要内容:物联网的优点,物联网的缺点目前可用的技术都没有达到其100%的能力。它总是有一个差距。 因此可以说,物联网在这个世界中拥有重要的技术,可以帮助其他技术达到其准确和完整的100%能力。 下面来看看物联网的主要优点和缺点。 物联网的优点 物联网促进了商业部门日常生活中的几个优点。 它的一些优点如下: 高效的资源利用:如果了解每个设备的功能和工作方式,我们肯定会提高资源的有效利用率并监控自然资源。 最大限度地减少人力:当物联网设

    • 主要内容:Python的优点,Python 的缺点Python 是一种开源的解释型脚本编程语言,它之所以非常流行,主要有三点原因: Python 简单易用,学习成本低,看起来非常优雅干净; Python 标准库和第三库众多,功能强大,既可以开发小工具,也可以开发企业级应用; Python 站在了人工智能和大数据的风口上,站在风口上,猪都能飞起来。 举个简单的例子来说明一下 Python 的简单: 比如要实现某个功能,C语言可能需要 100 行代码

    • 本文向大家介绍Fetch和Ajax比有什么优缺点?相关面试题,主要包含被问及Fetch和Ajax比有什么优缺点?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: promise方便异步,在不想用jQuery的情况下,相比原生的ajax,也比较好写。