2014-11-15 12 views
6

Obecnie stworzyłem dyrektywę dołączoną do formularza. Za każdym razem, gdy formularz jest brudny, mam modal potwierdzenia przez window.onbeforeunload pop-up, gdy próbuje opuścić. Teraz próbuję napisać test jaśminowy, aby upewnić się, że window.onbeforeunload zostanie wywołany po zmianie odświeżenia/url.Jak wyzwolić window.onbeforeunload w jaśminowym teście

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

Część Jasmine 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(); 
    }); 
}); 

Odpowiedz

1

Brzmi jak próbujesz sprawdzić, czy metoda robi to, co ma robić co jest ogień, gdy adres URL został zmieniony/odświeżenia. Prawdopodobnie powinieneś testować kod, który wydarzy się w tym wydarzeniu. Możesz wywołać to zdarzenie w swoim jaśminowym skrypcie, używając polecenia wyzwalacza jquery w obiekcie okna, więc coś w tym stylu.

$ (okno) .trigger ("onbeforeunload");

+2

Kiedy zrobiłem ognia zdarzenie onbeforeunload, by to przerwać testy jaśminu i zrobić pełne odświeżanie na stronie internetowej. –

1

W teście jednostkowym wystarczy przetestować implementację zdarzenia "onbeforeunload". W przeciwnym razie możesz napisać test e2e pod numerem Protractor.

Możesz zrobić test tak:

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

Mam TypeError: window.onbeforeunload nie jest funkcją –

Powiązane problemy