Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I have a test which each time I run it, throws "UnknownError: unknown error: Maximum call stack size exceeded. "

This test is calling a method in one of my services which writes to Google Drive.

The test that is failing is calling my doDrive function with "ui", meaning update a Drive item. If I change a single character "ui" -> "ni", meaning create a new Drive item, the test works. The code under test works fine in normal use.

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);
});
});

I'm using the chrome webdriver directly, and I also have browser.ignoreSynchronization = true;

like image 573
pinoyyid Avatar asked Sep 12 '14 11:09

pinoyyid


1 Answers

I'm having the same issue. I've found that returning big objects from the browser to protractor leads to the "UnknownError: unknown error: Maximum call stack size exceeded" error.

You should check the complexity of the resp object you're sending back with the callback. If it's too big, try to send back less data.

This can happen with executeAsyncScript, executeScript and evaluate (which use executeScript).

Edit by OP...

Fixed by changing callback(resp) to callback({title:resp.title}), ie simplifying the returned object to contain only those items that I am aserting.

like image 106
Offirmo Avatar answered Oct 07 '22 05:10

Offirmo