При запуске всего набора тестов я получаю следующую ошибку:
 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]);
    });
  });
});
Ниже приведены некоторые скриншоты профилирования:
UPDATE
Мне удалось вызвать утечку памяти, просто обернув один из моих it в цикле.
например:.
for (i = 0; i < 200; i++) {
  it('does this', function() {
    expect(ctrl.my_list).to.eql([1, 2, 3]);
  });
}
В моих тестах я установил все объекты внутри объекта-контейнера и очистил его в afterEach (например, решение здесь), но не повезло. Распределение памяти по-прежнему увеличивается в инструменте Chrome Dev Timeline.
Спасибо!



