2014-09-16 7 views
8

Stiamo eseguendo i nostri test dell'unità Jasmine utilizzando una combinazione di Karma e PhantomJS sul server di build. Esecuzione dei test localmente su Chrome funziona bene, l'errore non si verifica lì (che è una domanda diversa). Ecco cosa sta succedendo:PhantomJS si chiude dopo l'errore di sintassi durante l'esecuzione dei test delle unità

A un certo punto l'esecuzione, il test viene eseguito in un errore "indefinito" e si ferma semplicemente:

PhantomJS 1.9.7 (Mac OS X) ERROR 
    TypeError: 'undefined' is not an object (evaluating 'dropScope.resize') 
    at /Users/nwinkler/workspaces/.../foo.js:250 
PhantomJS 1.9.7 (Mac OS X): Executed 654 of 1221 ERROR (14.512 secs/14.386 secs) 
DEBUG [karma]: Run complete, exitting. 
DEBUG [launcher]: Disconnecting all browsers 

Anche quando si esegue il karma con la bandiera --force, esce ancora a questo punto .

C'è un modo per avere Karma/PhantomJS continuare a eseguire i test senza fermarsi a questo punto? Perché PhantomJS non può recuperare da questo errore?

Non sono alla ricerca di una soluzione per l'errore undefined, questo è un argomento diverso: vorrei solo capire perché PhantomJS e Karma escono a questo punto e non continuano con i restanti test unitari.

+0

In attesa di una risposta su anche questo. .. –

+0

Questo succede alla mia suite anche indipendentemente dal browser. Sto provando a testare CKEditor e nei nostri test creiamo degli editor fittizi che causano errori js ma quando si tenta di far valere una qualche modifica dom gli errori js fanno sì che Karma interrompa l'esecuzione del test. Aggiornamento – branchgabriel

+1

: quando la nostra suite supera gli 800-1000+ test questi errori sembrano accumularsi e causare l'arresto. Ho scoperto che cambiare l'ordine di caricamento nell'array dei file ci aiuta, ma ci impedisce di utilizzare globs per includere test. Il Karma dovrebbe fallire solo in caso affermativo, non errori. – branchgabriel

risposta

0

io di solito uso questo codice per mettere in guardia sugli errori e riprendere la corsa (phantomjs)

phantom.onError = function(msg, trace) { 
    var msgStack = ['PHANTOM ERROR: ' + msg]; 
    if (trace && trace.length) { 
    msgStack.push('TRACE:'); 
    trace.forEach(function(t) { 
     msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : '')); 
    }); 
    } 
    console.error(msgStack.join('\n')); 
    //phantom.exit(1); // do not stop 
}; 

se si utilizza un oggetto di pagina:

page.onError = function(msg, trace) { 
    // never display errors 
    var msgStack = ['SITE ERROR: ' + msg]; 
    if (trace && trace.length) { 
    msgStack.push('TRACE:'); 
    trace.forEach(function(t) { 
     msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : '')); 
    }); 
    } 
    console.error(msgStack.join('\n')); 
} 
+0

Dove posizioni questo codice nella tua configurazione? Nel file di configurazione di Karma o in un file di codice personalizzato che includi nei tuoi test? – nwinkler

+0

Ho inserito questo codice sopra il primo test nel file di codice. – Eun

+0

@Eun Questo codice non ha avuto alcun effetto per me. Ho provato ad aggiungerlo all'inizio del mio primo test, anche nel codice di avvio phantom. Nessun effetto. Puoi essere più specifico su dove questo deve andare. Quale versione del fantoccio stai usando per far funzionare questo lavoro per te? Non riesco a trovare la funzione onError che dovrebbe sovrascrivere in phantomjs.js. – branchgabriel