2017-02-03 5 views
0

У меня есть функция в моем модуле, которая вызывает вызов AJAX, и при успешном ее перенаправлении пользователь. Я хотел проверить эту функцию в Jasmine, но я не могу заставить страницу не перезагружать.Jasmine spyOn вызывает исходную функцию

Вот моя функция:

function my_func() { 
    $.ajax({ 
     // parameters 
     success: function(data) { 
      // does something 
      reloadPage(path); 
     } 
    }); 
}  
function reloadPage(path) { 
    console.log('got here'); 
    window.location.href = path; 
} 

В моем тесте я шпионить функцию перезагрузки страницы с:

spyOn($, 'ajax').and.callFake(function(options) { 
    options.success(data); 
}); 
spyOn(my_module, 'reloadPage'); 
my_module.my_func(); 

И когда я бегу моих тестов я получаю это:

LOG LOG: 'got here' 
Firefox 42.0.0 (Linux 0.0.0) ERROR 
    Some of your tests did a full page reload! 

Должно ли не reloadPage быть заменено шпионами и НЕ вызваны? Я включил все соответствующие части кода, это «буквально» именно это, но если вам нужно, чтобы я предоставил больше информации, дайте мне знать!

+0

Вы пробовали поменять местами порядок установки шпионов? – Dan

+0

Да, по-прежнему такая же ошибка. – Vedran

ответ

1

Ваш код не содержит поддельный звонок для перезагрузки окна (reloadPage). Также вам не хватает ссылки this от функции успеха.

Вот как я изменил ваш код, и он работает сейчас. Вы можете увидеть его в действии here

var my_module = { 
    my_func: function() { 
    var self = this; 
    $.ajax({ 
     url: 'abc', 
     success: function(path) { 
     // does something 
     self.reloadPage(path); 
     } 
    }); 
    }, 
    reloadPage: function(path) { 
    console.log('got here'); 
    window.location.href = path; 
    } 
} 

describe('reload page test', function() { 
    it('test reload', function() { 
    spyOn(my_module, 'reloadPage').and.callFake(function(e) { 
     console.log("This is a spy call for reload page"); 
    }); 
    spyOn($, 'ajax').and.callFake(function(e) { 
     e.success('some window url path'); 
    }); 
    my_module.my_func(); 
    expect(my_module.reloadPage).toHaveBeenCalled(); 
    }) 
}); 
+0

Это сделало трюк. Большое спасибо! – Vedran

Смежные вопросы