我的模块中有一个函数可以进行AJAX调用,一旦成功,它会重定向用户。我想在Jasmine中测试该功能,但我无法让页面重新加载。
这是我的功能:
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 :(得分:2)
您的代码缺少对窗口重新加载(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();
})
});