Протрактор/тест жасмина "UnknownError: неизвестная ошибка: превышен максимальный размер стека вызовов"
У меня есть тест, который каждый раз, когда я его запускаю, выдает " UnknownError: неизвестная ошибка: превышен максимальный размер стека вызовов."
Этот тест вызывает метод в одной из моих служб, которая записывается на Google Диск.
Тест, который терпит неудачу, вызывает функцию doDrive с помощью "ui", что означает обновление элемента "Диск". Если я сменил один символ "ui" → "ni", то есть создать новый элемент "Диск", тест будет работать. Проверяемый код работает нормально при обычном использовании.
it('should update a file', function() {
browser.executeAsyncScript(function(callback) {
// get service
var service=angular.element(document.getElementById('ngapp')).injector().get('DriveQ')
// generate a title
var title = 'title of file';
// call doDrive to create a new file
service.doDrive({t:'ui',id:'0B6B-RNrxsCu2Sll7JZTYy2aDA', item:{title:title}})
.then(function (resp){
resp.originalTitle=title;
callback(resp)
});
}).then(function(resp) {
expect(resp.title).toEqual(resp.originalTitle);
});
});
Я использую хром-webdriver напрямую, и у меня также есть browser.ignoreSynchronization = true;
Ответы
Ответ 1
У меня такая же проблема. Я обнаружил, что возвращение больших объектов из браузера в транспортирёр приводит к ошибке "UnknownError: unknown: максимальный размер стека вызовов превышен.
Вы должны проверить сложность объекта resp
, который вы отправляете обратно с обратным вызовом. Если он слишком большой, попробуйте отправить меньше данных.
Это может произойти с executeAsyncScript
, executeScript
и evaluate
(которые используют executeScript
).
Редактировать по OP...
Исправлено, изменив callback(resp)
на callback({title:resp.title})
, то есть упростив возвращаемый объект, содержащий только те элементы, которые я использую.