2014-11-15 18 views
6

Attualmente, ho creato una direttiva allegata a un modulo. Ogni volta che il modulo è sporco, ho una modal di conferma da window.onbeforeunload pop up quando si tenta di lasciare. In questo momento sto provando a scrivere un test sui gelsomini per assicurarmi che window.onbeforeunload venga richiamato dopo l'aggiornamento/modifica dell'URL.Come attivare window.onbeforeunload in jasmine test

var app = angular.directive('app'); 

app.directive('dialog',[$window, function() { 
    return { 
     restrict: 'A', 
     require: 'form', 
     link: function(scope, element, attrs, formCtrl) { 
      $window.onbeforeunload = function() { 
       if(formCtrl.$dirty) { 
        return 'Are you sure you want to leave this form'; 
       } 
      }; 
     } 
    }; 
}]); 

Parte del gelsomino Spec

beforeEach(inject(function(_$rootScope_,_$state_,_$window_) { 
    $rootScope = _$rootScope_; 
    $state = _$state_; 
    $window = _$window_; 

    spyOn($window, 'onbeforeunload') 
})); 

describe('Listen for window prompt', function() { 
    it('should be called on url/refresh change', function() { 
     window.location.reload(); 
     expect($window.onbeforeunload).toHaveBeenCalled(); 
    }); 
}); 

risposta

1

Sembra che si sta tentando di verificare se il metodo fa quello che deve fare, che è il fuoco quando l'url è cambiato/rinfrescato. Probabilmente dovresti testare il codice che accade all'interno di questo evento. Puoi attivare questo evento nel tuo script jasmine usando il comando jquery trigger sull'oggetto window, quindi qualcosa di simile.

$ (finestra) .trigger ('onbeforeunload');

+2

Quando è scattato l'evento onbeforeunload, si spezzerebbe le prove di gelsomino e fare un aggiornamento completo sulla pagina web. –

1

In un test di unità è sufficiente testare l'implementazione dell'evento "onbeforeunload". Altrimenti puoi scrivere e2e test con Protractor.

Si può fare il test in questo modo:

describe('page leave handler', function() { 
    it('should handle page leave', function() { 
    // given 
    var element = compileDirective(); 
    var formCtrl = element.controller('ngForm'); 
    formCtrl.$dirty = true; 

    // when 
    var result = $window.onbeforeunload(); 

    // then 
    expect(result).toBe('Are you sure..'); 
    }); 
}); 
+0

Ho ricevuto TypeError: window.onbeforeunload non è una funzione –

Problemi correlati