当前位置:  开发笔记 > 前端 > 正文

Angular + Mocha内存泄漏

如何解决《Angular+Mocha内存泄漏》经验,为你挑选了0个好方法。

运行整套测试时出现以下错误:

timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

经过调查,我发现是内存泄漏问题。查看一些堆概要分析快照,似乎仍在引用对象,并且未对其进行垃圾收集。

有人知道可以防止这种情况发生的解决方案吗?有一些选择,例如遍历我的1000倍规格中的每一个,并添加afterEach一些清理功能,但这似乎是很多工作。

这是我大部分测试的样例布局

describe('MyClassCtrl', function() {

  var $httpBackend, $rootScope, ctrl;
  ctrl = $rootScope = $httpBackend = null;

  beforeEach(function() {
    module('myApp');
    inject(function($controller, $rootScope, _$httpBackend_, $stateParams) {
      var $scope;
      $stateParams.id = 1;
      $httpBackend = _$httpBackend_;
      $scope = $rootScope.$new();
      ctrl = $controller('MyClassCtrl', {
        $scope: $scope
      });
    });
  });

  describe('#_getMyList', function() {
    beforeEach(function() {
      $httpBackend.expectGET("/my/app/url").respond({
        my_list: [1, 2, 3]
      });
      ctrl._getMyList();
      $httpBackend.flush();
    });

    it('does this', function() {
      expect(ctrl.my_list).to.eql([1, 2, 3]);
    });
  });
});

以下是一些分析屏幕截图:

更新

通过将我it的一个包裹在一个循环中,我能够触发内存泄漏。

例如:

for (i = 0; i < 200; i++) {
  it('does this', function() {
    expect(ctrl.my_list).to.eql([1, 2, 3]);
  });
}

在我的测试中,我将所有对象的容器对象中,并在清理它afterEach(如解决方案在这里),但没有运气。Chrome的开发时间轴工具上的内存分配仍在不断增加。

谢谢!

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有