量角器/茉莉花测试抛出“UnknownError: unknown error: Maximum call stack size exceeded”

Protractor/jasmine test throws "UnknownError: unknown error: Maximum call stack size exceeded"

提问人:pinoyyid 提问时间:9/12/2014 最后编辑:igauravsehrawatpinoyyid 更新时间:9/29/2014 访问量:5402

问:

我有一个测试,每次运行它时,都会抛出“UnknownError:未知错误:超出最大调用堆栈大小。 "

此测试正在调用我的一个服务中写入 Google Drive 的方法。

失败的测试是使用“ui”调用我的 doDrive 函数,这意味着更新 Drive 项目。如果我更改单个字符“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);
});
});

我直接使用 chrome 网络驱动程序,我也有browser.ignoreSynchronization = true;

selenium-webdriver 茉莉花 量角 自动化 chrome-web-driver

评论

0赞 Abraham P 9/21/2014
你们的服务是什么样的?
0赞 pinoyyid 9/21/2014
这是一段庞大的复杂代码,用于构建和提交 Google Drive REST API 事务。要点。。。(1)服务工作正常,只是测试被破坏,(2)工作测试(REST PUT)和失败测试(REST POST)之间的代码路径几乎相同。服务的某些特定方面是否可能相关?
0赞 Abraham P 9/22/2014
有几件事通常会触发该特定异常。我想到的显而易见的事情是物体上的$watch
0赞 pinoyyid 9/22/2014
我不在我的应用程序中使用$watch。

答:

18赞 Offirmo 9/25/2014 #1

我有同样的问题。我发现将大对象从浏览器返回到量角器会导致“UnknownError:未知错误:超出最大调用堆栈大小”错误

您应该检查使用回调发回的对象的复杂性。如果数据太大,请尝试发回较少的数据。resp

这可能发生在 和 (使用 )。executeAsyncScriptexecuteScriptevaluateexecuteScript

编辑 OP...

通过更改为 来修复,即将返回的对象简化为仅包含我正在执行的那些项目。callback(resp)callback({title:resp.title})

评论

1赞 Olov 8/18/2015
我发现你也不能将太大的对象传递给浏览器。我使用第二个参数来传入一个元素,并且不得不使用该函数来避免此错误。browser.executeScriptgetWebElement