callFake和returnValue之间的唯一区别是callFake可以基于自定义逻辑(参数/环境)返回不同的值吗?
还有其他区别吗?
最佳答案
callFake(()=> {...})接受回调函数
组件文件:
@Component(...)
export class DependencyComponent {
constructor(private service: RandomService){....}
.....
sampleMethod() {
return this.service.randomMethod();
}
.....
}
上述组件的单元测试用例:
it('test callFake vs returnValue', () => {
let randomService= new RandomService();
let component = new DependencyComponent(randomService);
spyOn(randomService, 'randomMethod').and.callFake(() => 4)
expect(component.sampleMethod()).toBe(4)
spyOn(randomService, 'randomMethod').and.returnValue(10);
expect(component.sampleMethod()).toBe(10)
})
在上述情况下,两种方法都是正确的。
组件文件:
@Component(...)
export class DependencyComponent {
constructor(private service: RandomService){....}
.....
sampleMethod(val) {
return this.service.randomMethod(val);
}
.....
}
上述组件的单元测试用例:
it('test callFake vs returnValue', () => {
let randomService= new RandomService();
let component = new DependencyComponent(randomService);
spyOn(randomService, 'randomMethod').and.callFake((param) => param+4)
expect(component.sampleMethod(4)).toBe(8);
expect(component.sampleMethod(12)).toBe(16)
})
当执行
component.sampleMethod(4)
时,它将调用this.service.randomMethod(4)
。由于使用randomMethod()
监视and.callFake
,因此4
将作为and.callFake
的回调函数的参数传递。关于javascript - Jasmine :这是returnValue和callFake之间的唯一区别吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43839185/