在vue-test-utils中,使用shallowMount可以避免任何内存泄漏的方法吗?

时间:2018-11-09 10:37:27

标签: vue.js vuejs2 vue-test-utils

我们有一个针对vue的自定义单元测试设置,该设置可在Node,Mocha和jsdom程序包上运行,该程序包可模拟浏览器环境(无webpack,karma)。我们已经写了3k规格(具有数百个组件的大型应用程序),现在当mocha运行时,它变得越来越慢,最终该过程挂起了。我们以为“ jsdom”中可能存在内存泄漏,因此我们将其更改为“ domino”(替代软件包),但仍然挂起。

我们检查了堆内存的使用情况,它一直在增长(最大1.5 GB!)。

因此,我们认为问题在于vue或vue-test-utils。看起来每次我们使用mount / shallowMount都需要在每次测试后销毁/卸载它以释放内存吗?

有什么想法吗?预先感谢!

2 个答案:

答案 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();
    });
});