sinon从4.x升级到9.x后内存溢出

如何解决sinon从4.x升级到9.x后内存溢出

我正在将 sinon 从 4.x 升级到最新的 9.x。进行版本升级后,测试命令(使用mocha)发生内存溢出并导致进程崩溃。

我最好的猜测是,这是由于“使用 sinon 作为认沙箱”,这是在 v5 中引入的。我已经编写了大量测试,虽然有些测试通过 sinon.createSandBox() 使用自定义沙箱,但其中大多数直接使用 sinon 存根/间谍。这样一来,测试就没有用于清理存根/间谍的 after 块,因为它们会创建服务的新实例,并且不会影响任何其他套件。

示例案例,未使用清理:

  describe('static log(level,message,data)',() => {

    let logMethod;

    before(() => {
      Logger.setupLevels(['info']);

      const writer = { log: () => { } };
      logMethod = sinon.spy(writer,'log');
    });

    it('Should call log on the default writers',() => {
      Logger.info('Hi!');
      return expect(logMethod.calledWith('info','Hi!')).to.be.te;
    });
  });

所以,我想,由于 sinon认沙箱,它包含对所有间谍和存根的引用,它们之前在测试块完成后立即被清除。根据文档,我需要添加一个 after 块来执行 sinon.restore()。我使用了全局 afterEach 来恢复认沙箱,尽管有数千个错误,但它仍然有效。所以,我需要每个 afterdescribe 子句,而不是每个 it。我正在寻找可以在一个地方进行配置的解决方案,而不是在每个文件中进行繁琐的工作。

这是 something 我发现这与我的需要相似,尽管它还需要我修改每个规范文件。我还想知道是否还有其他选项可以用来高效快速地执行此操作,也许是从 sinon 结束。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?