2014-12-04 13 views
8

Tôi đã tạo một hàm window.location.reload trong javascript của mình.Mock window.location.reload trong thử nghiệm Jasmine

Tôi cần giả lập chức năng tải lại trong khi thử nghiệm ở Jasmine vì nó tiếp tục lặp.

Bài kiểm tra diễn ra tốt đẹp khi tôi chạy grunt jenkins. Nhưng không phải trong khi thử nghiệm trong trình duyệt (mozilla/chrome).

Đây là đoạn mã của tôi.

Javascript:

window.location.reload(); 

Jasmine Test:

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

bất cứ ai có thể vui lòng giúp tôi về vấn đề này?

+2

'window.location.reload' không phải là thuộc tính có thể ghi, do đó trình duyệt sẽ không cho phép một gián điệp ghi đè lên nó. Để giải quyết vấn đề này, hãy xem http://stackoverflow.com/questions/8919370/jasmine-mock-window-object – user2943490

Trả lời

5

Cảm ơn bạn đã chia sẻ quan điểm của mình.

Tôi đã làm một công việc xung quanh như được đề xuất và thành công.

Vì cửa sổ là đối tượng trình duyệt và không thể theo dõi được, tôi vừa gói hàm trong JavaScript và tham chiếu hàm đó trong thông số thử nghiệm của mình.

mã Javascript:

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

cuộc gọi chức năng windowReload() nơi yêu cầu.

Jasmine Test:

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

Bạn luôn nên sử dụng $window thay vì window.

Hãy thử điều này:

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

hoặc chỉ làm cho bạn mình:

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

Bạn luôn có thể làm:

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

Tương ứng:

beforeAll(() => { 
    window.onbeforeunload =() => console.log('Mock redirect'); 
    window.open =() => console.log('Mock redirect'); 
}); 
Các vấn đề liên quan