我们有一个针对vue的自定义单元测试设置,该设置可在Node,Mocha和jsdom程序包上运行,该程序包可模拟浏览器环境(无webpack,karma)。我们已经写了3k规格(具有数百个组件的大型应用程序),现在当mocha运行时,它变得越来越慢,最终该过程挂起了。我们以为“ jsdom”中可能存在内存泄漏,因此我们将其更改为“ domino”(替代软件包),但仍然挂起。
我们检查了堆内存的使用情况,它一直在增长(最大1.5 GB!)。
因此,我们认为问题在于vue或vue-test-utils。看起来每次我们使用mount
/ shallowMount
都需要在每次测试后销毁/卸载它以释放内存吗?
有什么想法吗?预先感谢!
答案 0 :(得分:0)
我发现的最好方法是在测试服之后将包装器设置为null
下面的示例使用摩卡
describe(" View ", () => {
let wrapper;
beforeEach() {
wrapper = mount(Com.Vue, { localVue }) ;
});
after( ()=> {
wrapper = null ;
});
});
在我的案例中,与众不同的是,多次运行测试(现在使用300mb内存)后内存泄漏约为8gb
JavaScript具有自动内存管理和垃圾回收功能。如果您删除了对数据的所有引用,则将回收内存
希望这会有所帮助
感谢投票
答案 1 :(得分:0)
确保你调用了 wrapper.destroy();在 afterEach 方法中,如果您在测试主体中使用 mount 或shallowMount 调用wrapper.destroy();在挂载新的 Vue 实例之前。 它对我有用。
describe(" View ", () => {
let wrapper;
beforeEach() {
wrapper = mount(Com.Vue, { localVue }) ;
});
afterEach(() => {
wrapper.destroy();
});
});