2014-12-04 19 views
8

Ho creato una funzione window.location.reload nel mio javascript.Mock window.location.reload in testing Jasmine

Ho bisogno di prendere in giro la funzione di ricarica durante il test in Jasmine poiché continua a girare.

Il test funziona correttamente quando si esegue grunt jenkins. Ma non durante i test nel browser (mozilla/chrome).

Ecco lo snippet di codice.

Javascript:

window.location.reload(); 

Jasmine prova:

spyOn(window.location, 'reload').and.callFake(function(){}); 

Qualcuno può please help me su questo?

+2

'window.location.reload' non è una proprietà scrivibile, quindi il browser non permetterà a una spia di sovrascriverlo. Per aggirare questo problema, vedi http://stackoverflow.com/questions/8919370/jasmine-mock-window-object – user2943490

risposta

5

Grazie per aver condiviso le tue opinioni.

Ho fatto un lavoro come suggerito e ha avuto successo.

Poiché la finestra è un oggetto browser e non può essere spiato, ho semplicemente avvolto la funzione in JavaScript e ho fatto riferimento a tale funzione nelle specifiche di prova.

codice Javascript:

var function = windowReload(){ 
    window.location.reload(); 
} 

chiamata la funzione windowReload() dove richiesto.

Jasmine prova:

spyOn(obj, 'windowReload').andCallFake(function(){}); 
-1

è necessario utilizzare sempre $window invece di window.

Prova questo:

$window = jasmine.createSpy('$window'); 

o semplicemente fare il vostro proprio:

$window = {location:{reload:function(){}}}; 
0

Si può sempre fare:

beforeAll(() => { 
    window.reload =() => console.log('Mock redirect'); 
}); 

Rispettivamente:

beforeAll(() => { 
    window.onbeforeunload =() => console.log('Mock redirect'); 
    window.open =() => console.log('Mock redirect'); 
});