mocha.js - sinon从4.x升级到9.x后内存溢出
问题描述
我正在sinon
从 4.x 升级到最新的 9.x。进行版本升级后,测试命令(使用mocha
)发生内存溢出并导致进程崩溃。
我最好的猜测是,这是由于sinon
v5 中引入的“用作默认沙箱”。我已经编写了大量测试,而有些测试使用自定义沙箱,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 的结尾。
解决方案
推荐阅读
- html - 如何通过 HTML 代码在 MVC 中绑定我的模型?
- entity-framework - Entity Framework 2.1 映射的问题
- d3.js - d3-fetch 和 UTF-16 LE
- windows - 如何在 Windows 10 上重置密码列表
- java - 集合、单例、垃圾回收
- c# - Xamarin Forms 中的异步 Web 服务请求使用使用回调的公司库
- arrays - 如果你有一个对象的对象,哪个类是可比较的?
- javascript - 在同一个类中调用 EventEmitter 两次?
- c++ - 无效的操作数和非法赋值强制转换
- asp.net - 如何根据下拉列表选择的值更改表中的数据