Профилирование утечек памяти в карма-бегун/жасмин

У меня есть приложение AngularJS с примерно 2000 модульными тестами, которые потребляют много памяти. После запуска тестов они работают довольно быстро (в Chrome) до тех пор, пока потребление памяти не достигнет 1,5 ГБ, после чего каждый тест начнет занимать около 3 секунд.

Теперь, я чертовски уверен, что это не связано с тем, почему мои тесты AngularJS, Karma/Jasmine работают так медленно? ,

На данный момент я понятия не имею, протекают ли те тесты или само приложение. Я хотел бы профилировать выполнение теста.

Я читал модульные тесты карма-бегун/жасмин и пытаюсь сделать следующее:

Вы можете использовать localhost: 9876/debug.html и профилировать память. Проверьте память перед выполнением (после того, как Жасмин выполнил все блоки describe() и собрал тесты), а затем после выполнения тестов - он должен быть таким же.

Но как это можно сделать?

Я действительно не понимаю, как можно проверить до и после. Могу ли я как-то приостановить выполнение тестов? Может ли жасмин сказать мне, когда он "собрал тесты", и ждать, пока я сделаю профилирование?

Или есть другой подход?

Ответ 1

Это не полный ответ, а просто "размышление вслух"...

  1. Сначала я хотел бы изолировать набор.
  2. Тогда я бы начал изучать API-интерфейс Chrome Console - так что сосредоточьтесь только на одном браузере.
  3. Теперь в каждом beforeEach или после afterEach триггера и выключения профайлера (используя aa suite + test name для каждого профилирования): см. console.profile(\[label\]) и console.profileEnd().
  4. На этом этапе вам не нужно останавливать что-либо, чтобы запустить профилирование, в конце тестирования вы получите все результаты (с метками).

Найдя место, где память поднимается, вы можете сфокусировать область и, возможно, начать отладку более определенным образом...

Ответ 2

Мы наблюдаем подобные проблемы в недавнем Chrome, хотя мы используем Mocha. Интересно, что вы можете установить отладчик, и память все еще поднимается... Это заставляет меня считать, что его не наш код или даже размер кучи JS, похоже, как ошибка браузера?