Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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/8/selenium/4.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
如何监视Jasmine中的原始函数而不是虚拟函数进行javascript测试?_Javascript_Jasmine - Fatal编程技术网

如何监视Jasmine中的原始函数而不是虚拟函数进行javascript测试?

如何监视Jasmine中的原始函数而不是虚拟函数进行javascript测试?,javascript,jasmine,Javascript,Jasmine,我看了关于在Jasmine中监视函数的其他问题,但我的疑问没有得到回答。我打算使用andCallThrough跟踪src脚本中的原始函数。这就是我所拥有的: describe("My Test to spy :", function() { var mySpy = jasmine.createSpy(window, "login"); befor

我看了关于在Jasmine中监视函数的其他问题,但我的疑问没有得到回答。我打算使用andCallThrough跟踪src脚本中的原始函数。这就是我所拥有的:

describe("My Test to spy :", function() {                                       
    var mySpy = jasmine.createSpy(window, "login");                             
    beforeEach(function(){
        mySpy();
    });

    it("Expects login() will be called", function(){                               
      expect(mySpy).toHaveBeenCalled();                                         
    });    
});

所以这个测试通过了,因为被称为间谍对吗?不是函数的原始实现。因此,如果我使用mySpy.andCallThrough,它会给出一个错误。这些文档都是关于链接对象和方法的。函数没有。需要一些帮助。

问题是您使用createSpy而不是spyOn。createSpy将创建一个新的spy,因此您不能在其上使用andCallThrough,因为没有可调用的函数。使用spyOn将用spy替换现有函数,并将旧函数保存在spy中。因此,当您使用andCallThrough时,它将调用这个旧方法

您可以使用createSpy,但必须传递名称和原始函数:

jasmine.createSpy('someName', window.login)
当您使用“spyOn”时,必须向包含函数和函数名称的对象传递:

jasmine.spyOn(window, 'login')

问题是您使用createSpy而不是spyOn。createSpy将创建一个新的spy,因此您不能在其上使用andCallThrough,因为没有可调用的函数。使用spyOn将用spy替换现有函数,并将旧函数保存在spy中。因此,当您使用andCallThrough时,它将调用这个旧方法

您可以使用createSpy,但必须传递名称和原始函数:

jasmine.createSpy('someName', window.login)
当您使用“spyOn”时,必须向包含函数和函数名称的对象传递:

jasmine.spyOn(window, 'login')

另一件事,在文档中,foo已经被初始化了。为什么呢?如果不进行初始化,我想我就不能使用spyOn。@Andreas不应该是spyOn示例窗口“login”的最后一行?另一件事,在文档中,foo已经用一些东西进行了初始化。为什么呢?如果不初始化,我认为我不能使用spyOn。@Andreas不应该是示例spyOn窗口“login”的最后一行?