Ank*_*ain 8 unit-testing jasmine karma-jasmine
我是新手,对Jasmine上述两个功能有点困惑。我的唯一目的是为间谍功能提供虚假实现。但是,如果我将调试器放入callFake它会被调用,但它and.stub的函数不会被调用。谁能解释一下这两个功能之间的区别。
spyOn(manager, 'getUsers').and.stub(function () {
//to do
});
Run Code Online (Sandbox Code Playgroud)
对比
spyOn(manager, 'getUsers').and.callFake(function () {
//to do
});
Run Code Online (Sandbox Code Playgroud)
Jon*_*man 16
查看位于https://jasmine.github.io/2.0/introduction.html#section-Spies的文档,当spyOn它记录在被监视的对象方法上进行的所有调用时。这意味着它正在调用对象的实际方法,但会跟踪进行了哪些调用。
如果您想允许使用原始对象,但不想调用特定方法,则可以选择使用and.callFake和and.stub。不同之处在于方法签名。
callFake接受一个函数作为参数。这允许您伪造方法调用并返回您想要的值。
原始方法签名是 myMethod(param1: string): string
spyOn(service, 'myMethod').and.callFake((param1) => {
expect(param1).toBe('value');
return 'returnValue';
});
Run Code Online (Sandbox Code Playgroud)
stub 没有参数,只是拦截对方法的调用
spyOn(service, 'myMethod').and.stub();
Run Code Online (Sandbox Code Playgroud)
myMethod 可以有参数,也可以有返回类型,但这并不重要,因为 stub 只是拦截调用,null如果有返回类型就会返回。
在这两种情况下,都会记录方法调用,然后您可以执行类似expect(service.myMethod).toHaveBeenCalled()或expect(service.myMethod).toHaveBeenCalledWith('value')
| 归档时间: |
|
| 查看次数: |
10999 次 |
| 最近记录: |