Я использую модифицированную версию Jasmine JUnit Reports (находится здесь: https://github.com/angular/protractor-cookbook/tree/master/jasmine-junit-reports) и получаю сообщение об ошибке RangeError: Maximum call stack size exceeded
Причина, по которой я изменил отчет, заключается в том, что мне нужны отчеты xml, созданные на шаге suiteDone
, а не на шаге jasmineDone
. Таким образом, в основном я переместил весь код из jasmineDone
в функцию suiteDone
, которая теперь вызывает ошибку, которую я вижу. Я относительно новичок в js, поэтому не совсем уверен, есть ли какая-то асинхронная проблема или что-то в этом роде.
Это трассировка стека и связанные биты кода:
- RangeError: Maximum call stack size exceeded
at getSuite (C:\Users\AutomationUser\application\admin\adminui\e2e\common-pages\reporter.js:248:26)
at exportObject.QmetryReporter.self.suiteDone (C:\Users\AutomationUser\application\admin\adminui\e2e\common-pages\reporter.js:312:21)
at exportObject.QmetryReporter.self.suiteDone (C:\Users\AutomationUser\application\admin\adminui\e2e\common-pages\reporter.js:322:22)
getSuite
функция (строка 248):
function getSuite(suite) {
__suites[suite.id] = extend(__suites[suite.id] || {}, suite);
return __suites[suite.id];
}
Кусок suiteDone
Функция:
self.suiteDone = function (suite) {
suite = getSuite(suite); // this is line 312 from stacktrace
if (suite._parent === UNDEFINED) {
// disabled suite (xdescribe) -- suiteStarted was never called
self.suiteStarted(suite);
}
suite._endTime = new Date();
currentSuite = suite._parent;
// below this line is the start of jasmineDone function that I moved into this function
if (currentSuite) {
// focused spec (fit) -- suiteDone was never called
self.suiteDone(fakeFocusedSuite); // this is line 322 from stacktrace
}
Кажется, проблема возникает только при выполнении большой группы тестовых спецификаций. Если просто запустить один тестовый файл, я не получаю проблему.