2013-10-22 18 views
18

Sto scrivendo alcuni test Jasmine per alcuni javascript legacy che produce un avviso o una conferma in alcuni punti del codice.Test di avvisi javascript con Jasmine

Nel momento in cui viene visualizzato l'avviso, sospende l'esecuzione nel browser richiedendomi di premere ok prima di procedere.

Sono sicuro che mi manca qualcosa ma c'è un modo per simulare un avviso?

Ancora meglio è possibile scoprire qual era il messaggio per l'avviso?

Grazie per il vostro aiuto.

+0

Vedi questo link https://gist.github.com/roine/9621298 –

+3

Si dovrebbe modificare la risposta accettata qui per jolySoft di. –

risposta

0

È sufficiente creare una spia, sorprendentemente con createSpy(), per prendere in giro la funzione che contiene l'avviso. Così si può fare qualcosa di simile:

beforeEach(function() { 
    functionWithAlert = jasmine.createSpy("functionWithAlert");  
    functionWithAlert("called as usual"); 
}); 

Si può anche fare questo per restituire qualcosa

oldFunctionWithAlert = jasmine.createSpy("oldFunctionWithAlert() spy").andCallFake(function() { 
    console.log("Doing some testing"); 
    return "Test"; 
}); 

Una nota a parte, vorrei suggerire di sostituire l'avviso, se possibile, con alternative meno dirompenti. Ci sono un sacco di opzioni là fuori come JQuery UI dialog.

+0

Grazie per questo usando il primo snippet di codice. – pixelmatt

3
var oldalert = alert; 
alert = jasmine.createSpy(); 
// do something 
expect(alert).toHaveBeenCalledWith('message') 
alert = oldalert 
+0

Anche questo funziona, ma il problema è che non interrompe la chiamata alla funzione di avviso nativa in Chrome, il che potrebbe risultare fastidioso se devi eseguire molti test. – pixelmatt

+0

utilizzando quanto segue sovrascriverà la funzione di avviso nativa per i miei scopi. window.alert = jasmine.createSpy(). ECallFake (funzione (messaggio) { console.log ("avviso falso"); }); ' – pixelmatt

+0

Questo è un modo corretto per ottenere sempre l'ultimo messaggio di avviso – Ulterior

1

Un altro modo è farlo nell'assistente tecnico.

window.alert = function(){return;}; 
+2

Lui/Lei vuole sapere "qual era il messaggio per l'avviso?". quindi questa soluzione non aiuta davvero ma sopprime la finestra di avviso. –

59
spyOn(window, 'alert'); 
. . . 
expect(window.alert).toHaveBeenCalledWith('a message'); 
+6

Questa dovrebbe essere la risposta accettata –

+0

Questa è la risposta giusta. – superluminary

+0

Che ne dici di window.confirm con possibilità di confermare o ignorare? – rook

Problemi correlati