19

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

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

失败的测试是用“ui”调用我的 doDrive 函数,这意味着更新驱动器项目。如果我更改单个字符“ui”->“ni”,即创建一个新的 Drive 项目,则测试有效。被测代码在正常使用中运行良好。

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 webdriver,我也有browser.ignoreSynchronization = true;

4

1 回答 1

18

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

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

这可能发生在executeAsyncScript,executeScriptevaluate(使用executeScript)。

由 OP 编辑​​...

通过更改callback(resp)为 来 修复callback({title:resp.title}),即简化返回的对象以仅包含我要声明的那些项目。

于 2014-09-25T09:20:29.467 回答