首页 > 解决方案 > sinon从4.x升级到9.x后内存溢出

问题描述

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

我最好的猜测是,这是由于sinonv5 中引入的“用作默认沙箱”。我已经编写了大量测试,而有些测试使用自定义沙箱,sinon.createSandbox()其中大多数sinon直接用于 stub/spy。有了这个,测试没有一个 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来恢复默认沙箱,尽管有数千个错误,但它仍然有效。所以,我需要after每个子句describe,而不是每个子句it。我正在寻找可以在一个地方进行配置的解决方案,而不是在每个文件中进行这项繁琐的工作。

我发现这与我的需求相似,尽管它也需要我修改每个规范文件。我也想知道是否有任何其他选择可以用来有效和快速地做到这一点,也许从 sinon 的结尾。

标签: mocha.jssinon

解决方案


推荐阅读