gpt4 book ai didi

unit-testing - Jasmine 中 and.stub 与 and.callFake 有什么区别

转载 作者:行者123 更新时间:2023-12-04 05:10:38 28 4
gpt4 key购买 nike

我是 Jasmine 的新手并且在上述两个功能之间有点混淆。我的唯一目的是为 spy 功能提供虚假实现。但是,如果我把调试器放在 callFake它正在被调用,但是 and.stub的函数没有被调用。谁能解释一下这两个功能之间的区别。

spyOn(manager, 'getUsers').and.stub(function () {
//to do
});

对比
 spyOn(manager, 'getUsers').and.callFake(function () {
//to do
});

最佳答案

查看位于 https://jasmine.github.io/2.0/introduction.html#section-Spies 的文档,当您spyOn它记录了对监视对象方法进行的所有调用。这意味着它正在调用对象的实际方法,但会跟踪进行了哪些调用。

如果您想允许使用原始对象,但不想调用特定的方法,您可以选择使用 and.callFakeand.stub .不同之处在于方法签名。
callFake接受一个函数作为参数。这允许您伪造方法调用并返回您想要的值。

原始方法签名是 myMethod(param1: string): string

spyOn(service, 'myMethod').and.callFake((param1) => {
expect(param1).toBe('value');
return 'returnValue';
});
stub没有参数,只是拦截对方法的调用
spyOn(service, 'myMethod').and.stub();

myMethod 可以有参数,也可以有返回类型,但这并不重要,因为 stub 只是拦截调用并返回 null如果有返回类型。

在这两种情况下,都会记录方法调用,然后您可以执行类似 expect(service.myMethod).toHaveBeenCalled() 的操作。或 expect(service.myMethod).toHaveBeenCalledWith('value')

关于unit-testing - Jasmine 中 and.stub 与 and.callFake 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49345031/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com