2014-11-15 161 views
6

Hiện tại, tôi đã tạo một chỉ thị được đính kèm với biểu mẫu. Bất cứ khi nào form bị bẩn, tôi có một phương thức xác nhận bởi window.onbeforeunload bật lên khi cố gắng rời khỏi. Ngay bây giờ tôi đang cố gắng để viết một bài kiểm tra hoa nhài để đảm bảo window.onbeforeunload được gọi khi refresh/url thay đổi.Cách kích hoạt window.onbeforeunload trong kiểm tra hoa nhài

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

Một phần của 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(); 
    }); 
}); 

Trả lời

1

Có vẻ như bạn đang cố gắng để kiểm tra xem phương pháp làm những gì nó là vụ phải làm đó là lửa khi url đã thay đổi/làm mới. Có lẽ bạn nên kiểm tra mã xảy ra bên trong sự kiện này. Bạn có thể kích hoạt sự kiện này trong kịch bản hoa nhài của bạn bằng cách sử dụng lệnh kích hoạt jquery trên đối tượng cửa sổ để một cái gì đó như thế này.

$ (cửa sổ) .trigger ('onbeforeunload');

+2

Khi tôi đã làm cháy, sự kiện onbeforeunload, nó sẽ phá vỡ các cuộc thử nghiệm hoa nhài và làm mới hoàn toàn trên trang web. –

1

Trong thử nghiệm đơn vị, chỉ đủ để kiểm tra việc triển khai sự kiện 'onbeforeunload' của bạn. Nếu không, bạn có thể viết kiểm tra e2e với Protractor.

Bạn có thể làm thử nghiệm của bạn như thế này:

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

Tôi đã nhận TypeError: window.onbeforeunload không phải là một hàm –

Các vấn đề liên quan