Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jasmine spyOn调用原始函数_Javascript_Jquery_Unit Testing_Jasmine - Fatal编程技术网

Javascript Jasmine spyOn调用原始函数

Javascript Jasmine spyOn调用原始函数,javascript,jquery,unit-testing,jasmine,Javascript,Jquery,Unit Testing,Jasmine,我的模块中有一个函数,可以进行AJAX调用,一旦成功,它就会重定向用户。我想在Jasmine中测试该函数,但我无法让页面不重新加载 以下是我的功能: function my_func() { $.ajax({ // parameters success: function(data) { // does something reloadPage(path); } }); } f

我的模块中有一个函数,可以进行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
函数)。 此外,您还缺少success函数中的
引用

下面是我如何修改您的代码,它现在可以工作了。 你可以在行动中看到它


您的代码缺少对窗口重新加载的假调用(
reloadPage
函数)。 此外,您还缺少success函数中的
引用

下面是我如何修改您的代码,它现在可以工作了。 你可以在行动中看到它


你试过交换间谍设置的顺序吗?是的,仍然是相同的错误。你试过交换间谍设置的顺序吗?是的,仍然是相同的错误。
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();
  })
});