13

Ho un test che ogni volta che l'eseguo, getta "UnknownError: errore sconosciuto:. Dimensione massima stack di chiamate superato"prova di goniometro/gelsomino getta "UnknownError: errore sconosciuto: chiamata di massima dimensione dello stack superato"

Questo test sta chiamando un metodo in uno dei miei servizi che scrive su Google Drive.

Il test non riuscito sta chiamando la mia funzione doDrive con "ui", che significa aggiornare un elemento di Drive. Se cambio un singolo carattere "ui" -> "ni", ovvero crea un nuovo oggetto Drive, il test funziona. Il codice in prova funziona bene nell'uso normale.

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

Sto utilizzando il cromo WebDriver direttamente, e ho anche browser.ignoreSynchronization = true;

+0

Com'è il tuo servizio? –

+0

è una parte di codice complessa e complessa che crea e invia transazioni API REST di Google Drive. Punti chiave ... (1) il servizio funziona bene, è solo il test che è rotto, (2) il percorso del codice è virtualmente identico tra un test di lavoro (REST PUT) e quello che fallisce (REST POST). C'è qualche aspetto specifico del servizio che potrebbe essere pertinente? – pinoyyid

+0

ci sono alcune cose che comunemente attivano quella particolare eccezione. La cosa ovvia che viene in mente è un $ watch su un oggetto –

risposta

13

Sto avendo lo stesso problema. Ho scoperto che restituire grandi oggetti dal browser al rapportatore porta allo "UnknownError: error error: Maximum stack stack size exceeded" error.

È necessario verificare la complessità dell'oggetto resp che si sta rinviando con il callback. Se è troppo grande, prova a inviare meno dati.

Questo può accadere con executeAsyncScript, executeScript e evaluate (che utilizzano executeScript).

Edit by OP ...

risolto modificando callback(resp) a callback({title:resp.title}), vale a dire semplificando l'oggetto restituito per contenere solo gli elementi che sto aserting.

+1

Ho scoperto che non è possibile passare oggetti troppo grandi al browser. Io uso il secondo parametro di 'browser.executeScript' per passare un elemento, e ho dovuto usare la funzione' getWebElement' per evitare questo errore. – Olov

Problemi correlati